Mey*_*sam 7 c++ linux file cmake
在 make 文件中执行任何目标之前,我需要创建以下始终过时的文件:${CMAKE_BINARY_DIR}/version.hpp.in 。文件内容如下:
#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"
)
Run Code Online (Sandbox Code Playgroud)
我想version.hpp.in每次运行make命令时生成文件。我怎样才能做到这一点?
您可以configure_file()为此使用:
configure_file(version.hpp.in ${DESTPATH}/version.hpp)\nRun Code Online (Sandbox Code Playgroud)\n\n其中DESTPATH是可选的并设置为您想要该文件的路径。
\n\n\n如果文件被修改,构建系统将重新运行 CMake 来重新配置文件并再次生成构建系统。
\n
(来源:文档,见下文)
\n\n文件version.hpp:
#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}" \nRun Code Online (Sandbox Code Playgroud)\n\n句法:
\n\nconfigure_file(<input> <output>\n [COPYONLY] [ESCAPE_QUOTES] [@ONLY]\n [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])\nRun Code Online (Sandbox Code Playgroud)\n\n文档:
\n\n# \'example\' is the targetname here, eg. using add_executable(example example.cpp)\n\nadd_custom_command(TARGET example PRE_BUILD COMMAND <CMAKE COMMAND HERE>)\nRun Code Online (Sandbox Code Playgroud)\n\n#define VERSION ${VERSION}\nRun Code Online (Sandbox Code Playgroud)\n\n仅用于测试 \xe2\x80\xa6
\n\ncmake_minimum_required(VERSION 2.8.12)\n\nset(VERSION 1.10)\nset(TEMPLATE_DIR ${CMAKE_CURRENT_SOURCE_DIR})\n\nadd_executable(example example.cpp)\n\nadd_custom_command(TARGET example PRE_BUILD \n COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/SetVersion.cmake)\nRun Code Online (Sandbox Code Playgroud)\n\nconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/../Version.h)\nmessage("Version set") # For testing only\nRun Code Online (Sandbox Code Playgroud)\n\ncmake现在像往常一样运行make并检查是否HELLO打印在 上make。
您可以使用add_custom_command(也许add_custom_target)来执行此类操作。
既然您询问如何在程序中构建版本符号,我将告诉您我使用的稍微不同的方法。我在这里问了一个与之相关的问题,并使用了一些代码:Embed Git revision inexecutable during Remote build with NetBeans
我使用的概念是直接从我在构建(或)时编写的文本文件生成目标文件中的实际符号git pull。然后我将该文件链接到可执行文件中。
| 归档时间: |
|
| 查看次数: |
8245 次 |
| 最近记录: |