Jee*_*eet 31 install cmake prefix
对于某些内部测试,我希望安装前缀默认为build目录的子目录,除非用户明确覆盖.我知道用户可以通过以下方式指定安装前缀:
$ cmake -DCMAKE_INSTALL_PREFIX=/foo/bar ..
Run Code Online (Sandbox Code Playgroud)
但是如果用户没有指定它,它应该默认为,例如${PWD}/installed
.
该变量CMAKE_INSTALL_PREFIX
已经设置为/usr/local
,所以我不能在设置之前检查是否取消设置/清空.
我目前的解决方案是添加一个用户必须调用的自定义开关,以指定CMAKE_INSTALL_PREFIX
变量得到遵守:
option(ENABLE_INSTALL_PREFIX "Install build targets to system (path given by '-DCMAKE_INSTALL_PREFIX' or '${CMAKE_INSTALL_PREFIX}' if not specified)." OFF)
if ( ENABLE_INSTALL_PREFIX )
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root")
else()
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root" FORCE)
endif()
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(a)除了需要传递给CMake以获得CMAKE_INSTALL_PREFIX
效果的额外标志的烦恼之外,上述是否有任何问题?
(b)是否有更好,更清洁,更强大,更惯用和/或更不烦人的方式来实现上述目标?
谢谢.
sak*_*kra 54
CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
如果CMAKE_INSTALL_PREFIX
未明确指定并且初始化为默认设置,则CMake设置布尔变量.您可以通过以下方式覆盖它:
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/installed" CACHE PATH "default install path" FORCE )
endif()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11186 次 |
最近记录: |