CPack подпроекты и публичный заголовок - PullRequest
0 голосов
/ 05 октября 2018

У меня вопрос по поводу CPack.У меня есть проект test_lib_1, который зависит от 2 других проектов test_lib_2 и test_lib_3.Оба test_lib_2 и 3 определяют свои собственные правила CPACK, определяя PUBLIC_HEADER для упаковки.test_lib_1 имеет то же правило, упаковывая двоичные файлы и некоторые public_headers.используя CPack, я получаю пакет с двоичными файлами для test_lib_1 и его общедоступными заголовками, двоичными файлами (динамическими библиотеками) для двух других подпроектов, а также общедоступными заголовками двух подпроектов: т.е. test_lib_2 и test_lib_3.

здесьмой CMakeLists.txt для test_lib_1 (для двух других файл похож без включения двух подпроектов).

cmake_minimum_required(VERSION 3.10)

set(PROJECT_NAME "test_lib_1")
set(PROJECT_VERSION 1.0.0)
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/opt/company")

project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} DESCRIPTION "test_lib_1 description")

file(GLOB PROJECT_INTERFACE "include/*.h")
file(GLOB PROJECT_HEADERS "src/*.h")
file(GLOB PROJECT_SRCS "src/*.cpp")

add_subdirectory(test_lib_2)
add_subdirectory(test_lib_3)

add_library(${PROJECT_NAME} SHARED ${PROJECT_INTERFACE} ${PROJECT_HEADERS} ${PROJECT_SRCS})

target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")

target_link_libraries(${PROJECT_NAME} test_lib_2)
target_link_libraries(${PROJECT_NAME} test_lib_3)

set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})

set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${PROJECT_INTERFACE}")

install(TARGETS ${PROJECT_NAME} 
    PUBLIC_HEADER DESTINATION "include"
    ARCHIVE DESTINATION "lib"
    RUNTIME DESTINATION "bin"
    LIBRARY DESTINATION "bin"
    )

set(CPACK_PACKAGE_CONTACT "Contact")

if(WIN32)
    set(CPACK_GENERATOR ZIP)
else()
    set(CPACK_GENERATOR "DEB" )
    set(CPACK_SET_DESTDIR TRUE )
endif()

include(CPack)

Мой текущий вывод: bin -> test_lib_1.dll;test_lib_2.dll;test_lib_3.dll включает -> test_lib_1.h;test_lib_2.h;test_lib_3.h ...

ожидается, что будет: bin -> test_lib_1.dll;test_lib_2.dll;test_lib_3.dll включает -> test_lib_1.h;

без публичного заголовка test_lib_2 и test_lib_3.

Есть идеи?

1 Ответ

0 голосов
/ 09 октября 2018

Я только что нашел возможное решение сам.Идея состоит в том, чтобы заключить часть install + cpack с

get_directory_property(hasParent PARENT_DIRECTORY)
if(NOT hasParent)
...
endi()

. Таким образом, если текущий проект является подпроектом, он не заполняет переменные для установки и cpack и не участвует в установке и установке.Инструкции cpack.

Надеюсь, что это может помочь другим

...