Я использую 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
каталог?
Генератороподобное выражение $<INSTALL_INTERFACE>
используется в target_include_directories()
команда сама по себе не устанавливать соответствующий каталог. Вам необходимо установить этот каталог вручную (с помощью install(FILES)
или же install(DIRECTORY)
).
выражение $<INSTALL_INTERFACE>
указывает интерфейсный каталог включения для цели в файле конфигурации, который экспортирует устанавливать дерево (см. install(EXPORT)
команда).
выражение $<BUILD_INTERFACE>
указанный интерфейс включает каталог для цели в самом проекте и в файле конфигурации, который экспортирует дерево сборки (см. EXPORT()
команда).
Но эти выражения не обеспечивают $<BUILD_INTERFACE>
каталог для копирования в $<INSTALL_INTERFACE>
один на установке. Напротив, содержимое этих каталогов обычно отличается: кроме заголовочных файлов для внешнего использования, установленных в $<INSTALL_INTERFACE>
каталог, каталог $<BUILD_INTERFACE>
может содержать заголовочные файлы для внутреннего использования в проекте, которые не установлены.
Других решений пока нет …