Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CPack packing multiple package

Tags:

cmake

cpack

How do I pack multiple packages using cpack. multiple package as follows:

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

B.tar.gz is included in A.tar.gz

like image 680
mashiaoo Avatar asked Oct 31 '13 04:10

mashiaoo


1 Answers

One solution I can think of is to create a custom target which generates the B.tar.gz and then use the install command to add the generated B.tar.gz. Below is the example CMakeLists.txt file I used to produce the output you want.

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)
like image 149
E-rich Avatar answered Nov 08 '22 14:11

E-rich