1

很多文章会说,你可以用 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 值,并且保留从命令行覆盖的能力。

(虽然是个小技巧,但找到答案也花了些时间。如果对你有帮助就给个赞吧 )


卷云舒
1 声望1 粉丝