每次调用特定的 make 目标时都从命令行调用更新 CMAKE 变量?

问题描述 投票:0回答:1

如果我的 CMakeLists.txt 中的

set(CPACK_PACKAGE_VERSION_MAJOR "2024-02-15")
具有
INCLUDE(CPack)
功能,那么在使用
cmake ../
创建 Makefile 后,我可以调用
make package
,生成的 .deb 文件将在其中包含指定的版本字符串它的文件名。

我还可以执行

execute_process( COMMAND date +'%Y-%m-%d' OUTPUT_VARIABLE CPACK_PACKAGE_VERSION_MAJOR)
并将
date +'%Y-%m-%d'
的输出写入 CMake
CPACK_PACKAGE_VERSION_MAJOR
变量;然而,该命令仅在配置时调用一次,当调用
cmake ../
时 - 并且生成的输出被硬编码在
CPackConfig.cmake
CPackSourceConfig.cmake
中。

我能做什么,让 Cmake 变量 - 甚至是 Makefile 变量 - 从调用某些外部程序的结果中更新,每次

make
与某些特定目标(如
make package
)被调用?

cmake
1个回答
0
投票

好的,在此处的评论中找到了答案:在每次构建之前从自定义命令设置 cmake 变量

“我想运行一个命令,并在每次 make 运行时将其输出传递给编译定义” - 这是不可能的,CMake 使用硬编码的编译器选项生成 Makefile。但是,您可以使用自定义脚本或程序包装编译器,这会添加所需的选项。

替代方案:https://cmake.org/cmake/help/latest/command/execute_process.html说:

execute_process
在生成系统之前,在 CMake 配置项目时运行命令。使用 add_custom_target() 和 add_custom_command() 命令创建在构建时运行的自定义命令。

注意

add_custom_target(targetname ALL ...)
每次在构建结束时运行,因此也将首先在
make upload
中运行 - 问题是如何传播变量值...

© www.soinside.com 2019 - 2024. All rights reserved.