对于一些内部测试,我希望安装前缀默认为构建目录的子目录,除非用户明确覆盖。我知道用户可以通过以下方式指定安装前缀:
$ cmake -DCMAKE_INSTALL_PREFIX=/foo/bar ..
但是如果用户没有指定这个,它应该默认为,例如${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()
我的问题是:
(a) 除了需要传递给 CMake 才能CMAKE_INSTALL_PREFIX
生效的额外标志的烦恼之外,上述是否存在任何问题?
(b) 是否有更好、更清洁、更健壮、更惯用和/或更少烦人的方式来实现上述目标?
谢谢。