我需要创建以下始终过时的文件:${CMAKE_BINARY_DIR}/version.hpp.in
在 make 文件中执行任何目标之前。文件内容如下:
#define RELEASE_VERSION "${RELEASE}"
#define MAJOR_VERSION "${MAJOR}"
#define MINOR_VERSION "${MINOR}"
#define PATCH_VERSION "${PATCH}"
#define REVISION "${REVISION}"
#define SVNPATH "${SVNPATH}"
我的 CMake 文件中有以下代码,但它仅在运行 cmake
命令后执行:
FILE(WRITE ${CMAKE_BINARY_DIR}/version.hpp.in
"#define RELEASE_VERSION \"${RELEASE}\"\n"
"#define MAJOR_VERSION \"${MAJOR}\"\n"
"#define MINOR_VERSION \"${MINOR}\"\n"
"#define PATCH_VERSION \"${PATCH}\"\n"
"#define REVISION \"${REVISION}\"\n"
"#define SVNPATH \"${SVNPATH}\"\n"
)
我想在每次运行make
命令时生成version.hpp.in
文件。我该怎么做?
最佳答案
您可以为此使用 configure_file()
:
configure_file(version.hpp.in ${DESTPATH}/version.hpp)
其中 DESTPATH
是可选的,设置为您想要该文件的路径。
If the file is modified the build system will re-run CMake to re-configure the file and generate the build system again.
(来源:文档,见下文)
文件version.hpp
:
#define RELEASE_VERSION "${RELEASE}"
#define MAJOR_VERSION "${MAJOR}"
#define MINOR_VERSION "${MINOR}"
#define PATCH_VERSION "${PATCH}"
#define REVISION "${REVISION}"
#define SVNPATH "${SVNPATH}"
语法:
configure_file(<input> <output>
[COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
文档:
# 'example' is the targetname here, eg. using add_executable(example example.cpp)
add_custom_command(TARGET example PRE_BUILD COMMAND <CMAKE COMMAND HERE>)
最小示例
版本.h.in
#define VERSION ${VERSION}
只是为了测试......
CMakeLists.txt
cmake_minimum_required(VERSION 2.8.12)
set(VERSION 1.10)
set(TEMPLATE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(example example.cpp)
add_custom_command(TARGET example PRE_BUILD
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/SetVersion.cmake)
设置版本.cmake
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/../Version.h)
message("Version set") # For testing only
现在像往常一样运行 cmake
和 make
并检查 HELLO
是否打印在 make
上。
关于c++ - CMake:如何使用 make 命令创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193171/