我的 CMake 文件中有以下一段脚本:
CONFIGURE_FILE(
${CMAKE_CURRENT_SOURCE_DIR}/version.hpp.cmake
${CMAKE_CURRENT_SOURCE_DIR}/version.hpp
)
Run Code Online (Sandbox Code Playgroud)
但它只在执行后运行cmake,而不是make. 是否可以version.hpp在每次制作后创建文件?
以下是内容version.hpp.cmake:
#ifndef _VERSION_HPP_
#define _VERSION_HPP_
#define MAJOR_VERSION "${MAJOR}"
#define MINOR_VERSION "${MINOR}"
#define PATCH_VERSION "${PATCH}"
#define RELEASE_VERSION "${RELEASE}"
#endif //_VERSION_HPP_
Run Code Online (Sandbox Code Playgroud)
的MAJOR,MINOR,PATCH和RELEASE变量已在定义CMakeLists.txt文件。
PS这篇文章显然与我的问题有关,但我无法理解。
问题是它configure_file应该在配置时运行,即运行时cmake,而不是编译时,即运行时 make。没有简单的方法可以解决这个问题。
问题是由 编写的信息configure_file取决于来自 CMake 构建环境的变量。如果不再次运行 CMake,则无法检测到对这些变量的更改。如果您将该信息反映在其他地方,您可以使用自定义命令来提取它并为您执行代码生成,正如Peter 的回答所建议的那样。
您在答案中链接的 CMake 邮件列表中的帖子中建议的方法基于两阶段 CMake 运行:外部 CMake 项目(仅运行一次)添加了用于构建内部 CMake 项目的自定义构建步骤(然后与执行的每个make)一起运行configure_file。基本思想与 Peter 的回答相同,只是您使用 CMake 脚本而不是 Python 脚本来生成文件。
我的个人建议:对于一个简单的问题作为版本标题,我不会打扰这么复杂的方法。只需将文件生成到您的 BINARY_DIR(而不是像您目前所做的那样生成到您的项目目录!您希望保留从同一源执行多个源外构建的能力)并假设它将在那里进行编译。如果用户有足够的勇气去处理那里生成的文件,他们可以自己重新运行 CMake。
| 归档时间: |
|
| 查看次数: |
6614 次 |
| 最近记录: |