2013-10-31 10 views
6

Come imballare più pacchetti utilizzando cpack. confezione multipla come segue:CPack packing package multiplo

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

B.tar.gz è incluso nel A.tar.gz

risposta

1

Una soluzione mi viene in mente è quello di creare un target personalizzato che genera la B.tar.gz e quindi utilizzare il install comando per aggiungere il generato B.tar.gz. Di seguito è riportato il file di esempio CMakeLists.txt utilizzato per produrre l'output desiderato.

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)