gpt4 book ai didi

cmake - 重命名 CPack 的输出

转载 作者:行者123 更新时间:2023-12-04 14:17:10 29 4
gpt4 key购买 nike

我想重命名 CPack (v2.8.7) 生成的安装程序文件,以包含在构建时从版本控制系统获取的版本号。看来这不能通过设置 CPACK_* 变量来完成,因为这发生在“cmake”时间。

我想要做的是运行“(n)make package”并创建安装程序文件,而无需其他命令。我知道的两种可能的方法是在构建时操作 CPack 文件名变量并重命名 CPack 的最终输出。

如果在 CMakeLists.txt 文件中使用“include(CPack)”,那么 CPack 似乎总是最后运行,并且您不能有构建后命令。 This mailing list message建议可以编写自定义目标来运行 CPack,但我无法弄清楚如何在不创建无限递归的情况下做到这一点。

如何才能做到这一点?

最佳答案

在 CMake 邮件列表的帮助下,我找到了使用 subversion 的方法。

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(myapp)

add_executable(main main.cpp)
install(TARGETS main DESTINATION .)

add_custom_target(first ALL
# update the working copy
COMMAND ${Subversion_SVN_EXECUTABLE} update ${CMAKE_SOURCE_DIR}

# generate cpackoptions.cmake at build time so we get the
# most recent revision number
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DBINARY_DIR=${CMAKE_BINARY_DIR}
-Dproj_name=${CMAKE_PROJECT_NAME}
-P ${CMAKE_SOURCE_DIR}/create-cpackoptions.cmake
)

add_dependencies(main first)

set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/CPackOptions.cmake)

include(CPack)

创建-cpackoptions.cmake
include(FindSubversion)
Subversion_WC_INFO(${SOURCE_DIR} ${proj_name})

set(revision ${${proj_name}_WC_REVISION})

configure_file(${SOURCE_DIR}/CPackOptions.cmake.in
${BINARY_DIR}/CPackOptions.cmake
@ONLY)

cpackOptions.cmake.in
set(CPACK_PACKAGE_FILE_NAME "@proj_name@-${CPACK_PACKAGE_VERSION}r@revision@-${CPACK_SYSTEM_NAME}")

关于cmake - 重命名 CPack 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613051/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com