CPack打包多个包

Posted

技术标签:

【中文标题】CPack打包多个包【英文标题】:CPack packing multiple package 【发布时间】:2013-10-31 04:09:37 【问题描述】:

如何使用 cpack 打包多个包。多个包如下:

A.tar.gz
---bin/hello
---lib/libhello.a
---B.tar.gz
   ---bin/demo
   ---lib/libdemo.a

B.tar.gz 包含在 A.tar.gz 中

【问题讨论】:

【参考方案1】:

我能想到的一个解决方案是创建一个生成B.tar.gz 的自定义目标,然后使用install 命令添加生成的B.tar.gz。下面是我用来生成所需输出的示例 CMakeLists.txt 文件。

cmake_minimum_required(VERSION 2.8)

project(pack_multiple_example)

# Create the custom command to tar up the files
# wanted in the B.tar.gz
set(B_OUTPUT "B.tar.gz")
add_custom_target(
    $B_OUTPUT
    COMMAND tar -czf $B_OUTPUT demo libdemo.a
    DEPENDS demo demo_exe
    )
install(
    FILES "$PROJECT_BINARY_DIR/$B_OUTPUT"
    DESTINATION .
    )

# Create libhello target
set(HELLOLIB_SRCS hellolib.c)
add_library(hello $HELLOLIB_SRCS)
install(
    TARGETS hello
    ARCHIVE DESTINATION lib
    LIBRARY DESTINATION lib
    COMPONENT hello
    )

# Create hello binary target
set(HELLO_SRCS hello.c)
add_executable(hello_exe $HELLO_SRCS)
# Auto-build the B.tar.gz when hello_exe changes
add_dependencies(hello_exe $B_OUTPUT)
target_link_libraries(hello_exe hello)
# Set the output name since we use the 'hello' target name
# for the library target.
set_target_properties(hello_exe PROPERTIES OUTPUT_NAME hello)
install(
    TARGETS hello_exe
    RUNTIME DESTINATION bin
    COMPONENT hello
    )

# Create libdemo target
set(DEMOLIB_SRCS demolib.c)
add_library(demo $DEMOLIB_SRCS)
# The install command below is commented out since the
# target output is packaged via the custom target above
#install(
#    TARGETS demo
#    ARCHIVE DESTINATION lib
#    LIBRARY DESTINATION lib
#    COMPONENT demo
#    )

# Create demo binary target
set(DEMO_SRCS demo.c)
add_executable(demo_exe $DEMO_SRCS)
target_link_libraries(demo_exe demo)
# Set the output name since we use the 'demo' target name
# for the library target.
set_target_properties(demo_exe PROPERTIES OUTPUT_NAME demo)
# The install command below is commented out since the
# target output is packaged via the custom target above
#install(
#    TARGETS demo_exe
#    RUNTIME DESTINATION bin
#    COMPONENT demo
#    )

set(CPACK_GENERATOR "TGZ")

include(CPack)

【讨论】:

以上是关于CPack打包多个包的主要内容,如果未能解决你的问题,请参考以下文章

cmake/cpack 组件 debuginfo rpm 包没有出现

使用 CPack 在 Mac 上打包系统守护进程

使用 cmake 创建多个 Debian 软件包

CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?

更改组件 RPM 的 cpack 生成名称

使用 CPack 打包时是不是需要 CMake 安装步骤?