我想在生成的脚本中记录传递给cmake的参数.例如,"my-config.in"将由cmake处理,它的定义如下:
配置= "@ CMAKE_ARGS @"
之后cmake,my-config将包含这样的行:
config =" - DLINUX -DUSE_FOO = y -DCMAKE_INSTALL_PREFIX =/usr"
我试过CMAKE_ARGS,CMAKE_OPTIONS但失败了.没有文件提到这一点.:-(
Fra*_*ser 17
我不知道提供此信息的任何变量,但您可以自己生成(有一些附带条件).
-D传递给CMake的任何参数都会添加到CMakeCache.txt构建目录中的缓存文件中,并在后续调用期间重新应用,而无需再次在命令行中指定.
所以在你的例子中,如果你首先执行CMake as
cmake ../.. -DCMAKE_INSTALL_PREFIX:PATH=/usr
Run Code Online (Sandbox Code Playgroud)
然后你会发现随后简单地运行
cmake .
Run Code Online (Sandbox Code Playgroud)
仍将CMAKE_INSTALL_PREFIX设置为/usr
如果您要查找的CMAKE_ARGS是从CMake的每次调用在命令行上定义的完整变量列表,那么以下应该可以解决这个问题:
get_cmake_property(CACHE_VARS CACHE_VARIABLES)
foreach(CACHE_VAR ${CACHE_VARS})
get_property(CACHE_VAR_HELPSTRING CACHE ${CACHE_VAR} PROPERTY HELPSTRING)
if(CACHE_VAR_HELPSTRING STREQUAL "No help, variable specified on the command line.")
get_property(CACHE_VAR_TYPE CACHE ${CACHE_VAR} PROPERTY TYPE)
if(CACHE_VAR_TYPE STREQUAL "UNINITIALIZED")
set(CACHE_VAR_TYPE)
else()
set(CACHE_VAR_TYPE :${CACHE_VAR_TYPE})
endif()
set(CMAKE_ARGS "${CMAKE_ARGS} -D${CACHE_VAR}${CACHE_VAR_TYPE}=\"${${CACHE_VAR}}\"")
endif()
endforeach()
message("CMAKE_ARGS: ${CMAKE_ARGS}")
Run Code Online (Sandbox Code Playgroud)
这有点脆弱,因为它取决于通过命令行设置的每个变量都有短语"没有帮助,在命令行上指定变量".指定为其HELPSTRING属性.如果CMake更改了此默认值HELPSTRING,则必须相应地更新if语句.
如果这不是您想要CMAKE_ARGS显示的内容,而只是当前执行中的参数,那么我认为没有办法可以做到这一点,无法破解CMake的源代码!但是,我希望这不是你想要的,因为所有以前的命令行参数每次都被有效地重新应用.
| 归档时间: |
|
| 查看次数: |
13287 次 |
| 最近记录: |