CPack: в архиве отсутствуют интерфейсные каталоги

Я использую CMake 3.10.1 и пытаюсь использовать CPack для создания архивов для библиотеки, но не могу добавить каталог включения интерфейса в архив.

Библиотека и сгенерированные файлы экспорта добавляются как ожидается, однако каталог include (добавляется с использованием target_include_directories(... PUBLIC ...) полностью отсутствует

CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(Test VERSION 1.0.0 LANGUAGES CXX)

add_library(${PROJECT_NAME} SHARED foo.cpp) #add sources and executable

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/inc>
$<INSTALL_INTERFACE:inc>
)

install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}
INCLUDES DESTINATION inc
PUBLIC_HEADER DESTINATION inc
LIBRARY DESTINATION lib
)
install(EXPORT ${PROJECT_NAME} DESTINATION .)

include(CPack)

Содержание моего источника dir:

├── CMakeLists.txt
├── foo.cpp
└── inc
└── foo.h

Содержимое тгз, сгенерированного cpack -G TGZ .

├── lib
│   └── libTest.so
├── Test.cmake
└── Test-noconfig.cmake

Любые идеи, почему это может отсутствовать inc каталог?

0

Решение

Генератороподобное выражение $<INSTALL_INTERFACE> используется в target_include_directories() команда сама по себе не устанавливать соответствующий каталог. Вам необходимо установить этот каталог вручную (с помощью install(FILES) или же install(DIRECTORY)).


выражение $<INSTALL_INTERFACE> указывает интерфейсный каталог включения для цели в файле конфигурации, который экспортирует устанавливать дерево (см. install(EXPORT) команда).

выражение $<BUILD_INTERFACE> указанный интерфейс включает каталог для цели в самом проекте и в файле конфигурации, который экспортирует дерево сборки (см. EXPORT() команда).

Но эти выражения не обеспечивают $<BUILD_INTERFACE> каталог для копирования в $<INSTALL_INTERFACE> один на установке. Напротив, содержимое этих каталогов обычно отличается: кроме заголовочных файлов для внешнего использования, установленных в $<INSTALL_INTERFACE> каталог, каталог $<BUILD_INTERFACE> может содержать заголовочные файлы для внутреннего использования в проекте, которые не установлены.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]