【问题标题】:CMake top level project with multiple child projects creating packages具有多个创建包的子项目的 CMake 顶级项目
【发布时间】:2015-03-25 03:52:05
【问题描述】:

我有多个 CMake 项目,每个项目都创建一个 debian 包。我一直在尝试创建一个在每个“子”项目上调用 add_subdirectory() 的顶级项目。所有子项目都会构建,但“make project”会使用最后一个子项目的规范创建一个项目,并包含来自所有其他项目的文件。

基本上,每个 set(CPACK_...) 都会被下一个项目覆盖,直到最后一个项目和“install()”调用被累积。使用顶级项目时如何分离包创建?

编辑:添加了 sn-p。所有的“子”项目都是相似的。

# build a CPack driven installer package
if(CMAKE_BUILD_TYPE STREQUAL "release")
    set(CPACK_STRIP_FILES TRUE)
endif()
set(CPACK_GENERATOR DEB)
set(CPACK_PACKAGE_NAME ${PROJECT_NAME})
set(CPACK_PACKAGE_VENDOR Acme)
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "acme <support@acme.com>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Acme daemon")
message(STATUS "CPACK_PACKAGE_DESCRIPTION_SUMMARY: " ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
    set(SYSTEM_PROCESSOR amd64)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm")
    set(SYSTEM_PROCESSOR armhf)
else()
    message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR: " ${CMAKE_SYSTEM_PROCESSOR})
endif()
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${SYSTEM_PROCESSOR})
message(STATUS "CPACK_DEBIAN_PACKAGE_ARCHITECTURE: " ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
include(InstallRequiredSystemLibraries)
set(CPACK_PACKAGE_VERSION_MAJOR ${${PROJECT_NAME}_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${${PROJECT_NAME}_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${${PROJECT_NAME}_VERSION_PATCH})
set(CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_NAME}-${SYSTEM_PROCESSOR})
message(STATUS "CPACK_PACKAGE_FILE_NAME: " ${CPACK_PACKAGE_FILE_NAME})
set(CPACK_DEBIAN_PACKAGE_PRIORITY optional)
include(CPack)

【问题讨论】:

  • 你能分享子目录 CMakeLists.txt 文件的摘录吗?也就是说,set(CPACK_... ) 是如何发生的?
  • 我刚刚编辑了我的原始帖子并添加了每个“子”项目的 CMakeLists.txt 包含的内容的 sn-p。
  • 我认为这不仅仅是一个 CMake 问题,这是一个 CPack 问题(我不知道,抱歉)。搜索“cpack multiple packages”有几个想法……

标签: cmake cpack


【解决方案1】:

在每个子项目的 CMakeLists.txt 中,您可以设置 CPACK_OUTPUT_CONFIG_FILE 变量。 例如,对于 Child_1 项目,在您指定的 cmake 文件中:

set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CPackConfigChild_1.cmake")

然后,构建顶层项目后,您可以:

cpack -G DEB --config CPackConfigChild_1.cmake
# the same for all other child projects

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多