很多文章会说,你可以用 set(CACHE),但实际上因为CMAKE_INSTALL_PREFIX总会有一个默认值,所以根本不会生效;
如果你用 set(CACHE FORCE),那么将失去从命令行覆盖设置的能力。
正确的方式应该是:
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/MyInstallPath CACHE PATH "My default install prefix" FORCE)
endif()
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT:这是一个CMake的内部变量,不需要你自己维护。
这样就可以完美的做到:提供默认 prefix 值,并且保留从命令行覆盖的能力。
(虽然是个小技巧,但找到答案也花了些时间。如果对你有帮助就给个赞吧 )