gpt4 book ai didi

cmake - 如何捕获 CMake 命令行参数?

转载 作者:行者123 更新时间:2023-12-03 23:34:16 26 4
gpt4 key购买 nike

我想在生成的脚本中记录传递给 cmake 的参数。例如,"my-config.in"将被 cmake 处理,它有这样的定义:

config="@CMAKE_ARGS@"



cmake , my-config将包含这样的一行:

config="-DLINUX -DUSE_FOO=y -DCMAKE_INSTALL_PREFIX=/usr"



我试过 CMAKE_ARGS , CMAKE_OPTIONS ,但失败了。没有文件提到这一点。 :-(

最佳答案

我不知道提供此信息的任何变量,但您可以自己生成它(有一些附带条件)。

任意 -D传递给 CMake 的参数被添加到缓存文件 CMakeCache.txt在构建目录中,并在后续调用期间重新应用,而无需再次在命令行上指定。

所以在你的例子中,如果你首先执行 CMake 作为

cmake ../.. -DCMAKE_INSTALL_PREFIX:PATH=/usr

然后你会发现随后运行起来很简单
cmake .

仍然会有 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}")

这有点脆弱,因为它取决于这样一个事实,即通过命令行设置的每个变量都有短语“没有帮助,在命令行上指定了变量”。指定为其 HELPSTRING属性(property)。如果 CMake 更改此默认值 HELPSTRING ,您必须更新 if相应的声明。

如果这不是您想要的 CMAKE_ARGS来显示,而只是来自当前执行的参数,那么我认为除了破解 CMake 的源代码之外,没有办法做到这一点!但是,我希望这不是您想要的,因为每次都有效地重新应用所有以前的命令行参数。

关于cmake - 如何捕获 CMake 命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com