2013-10-31 101 views
6

如何使用cpack打包多個軟件包。多個包如下:CPack packing multiple packages

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)