我的项目包含一个自定义目标,它通过.cmake
脚本生成一些输出。它看起来像这样:
add_custom_target(TargetName
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/script.cmake
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/generated/output
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
VERBATIM
)
但现在我想在脚本中设置缓存变量。我试着这样做:
message("MY_CACHE_VARIABLE = ${MY_CACHE_VARIABLE}")
set(MY_CACHE_VARIABLE "VALUE" CACHE INTERNAL "")
我遇到了缓存变量没有保存的问题。它总是向我打印空输出:
MY_CACHE_VARIABLE =
我已经尝试将工作目录设置为CMAKE_BINARY_DIR
,或传递CMAKE_BINARY_DIR
cmake 命令的最后一个参数,或传递-B ${CMAKE_BINARY_DIR}
或-C ${CMAKE_BINARY_DIR}/CMakeCache.txt
作为参数等。这些都不起作用。
那么有没有办法在 CMake 子进程中重用现有的缓存,或者我应该在脚本中编写自己的缓存?
您必须区分运行 CMake 以生成构建文件(用于 Make、Ninja 等)和在脚本模式下运行 CMake:
脚本模式只运行给定 CMake 语言源文件中的命令,不生成构建系统。它不允许定义构建目标或操作的 CMake 命令。
-- cmake-语言(7)
不执行配置或生成步骤并且不修改缓存。
-- cmake(1)
所以在脚本模式 ( -P
) 中,CMake 不知道缓存或任何变量/目标/等。在您的常规CMakeLists.txt
文件中定义。它更类似于执行 bash/shell 脚本而不是处理“通常的” CMakeLists.txt
.
但是别担心,您的问题仍然有解决方案。您可以简单地将参数作为-D
选项传递给脚本:
add_custom_target(TargetName
COMMAND ${CMAKE_COMMAND}
-DMY_VAR="..."
-DANOTHER_VAR="..."
-P ${CMAKE_SOURCE_DIR}/cmake/script.cmake
...
)
但请注意:
如果使用 定义变量
-D
,则必须在-P
参数之前完成。
-- cmake(1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句