如果我的 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 变量
“我想运行一个命令,并在每次 make 运行时将其输出传递给编译定义” - 这是不可能的,CMake 使用硬编码的编译器选项生成 Makefile。但是,您可以使用自定义脚本或程序包装编译器,这会添加所需的选项。
替代方案:https://cmake.org/cmake/help/latest/command/execute_process.html说:
在生成系统之前,在 CMake 配置项目时运行命令。使用 add_custom_target() 和 add_custom_command() 命令创建在构建时运行的自定义命令。execute_process
注意
add_custom_target(targetname ALL ...)
每次在构建结束时运行,因此也将首先在 make upload
中运行 - 问题是如何传播变量值...