C++ CPack:存档中缺少接口包含目录
我正在使用CMake 3.10.1,并试图使用CPack为库生成存档,但我无法让它将接口include目录添加到存档中 库和生成的导出文件按预期添加,但是包含目录(使用C++ CPack:存档中缺少接口包含目录,c++,cmake,cpack,C++,Cmake,Cpack,我正在使用CMake 3.10.1,并试图使用CPack为库生成存档,但我无法让它将接口include目录添加到存档中 库和生成的导出文件按预期添加,但是包含目录(使用target\u include\u目录(…PUBLIC…添加)完全丢失 CMakeLists.txt: cmake_minimum_required(VERSION 3.5) project(Test VERSION 1.0.0 LANGUAGES CXX) add_library(${PROJECT_NAME} SHARE
target\u include\u目录(…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)
由cpack-G tgz生成的tgz的内容。
├── lib
│ └── libTest.so
├── Test.cmake
└── Test-noconfig.cmake
知道为什么它会缺少
inc
目录吗?在target\u include\u directories()中使用的类似生成器的表达式$
命令本身不会安装相应的目录。您需要手动安装此目录(使用install(FILES)
或install(directory)
)
表达式$
指定配置文件中目标的接口包含目录,该目录导出安装树(请参见install(EXPORT)
命令)
Expression$
指定的接口包括项目本身和导出生成树的配置文件中目标的目录(请参见EXPORT()
命令)
但这些表达式并不强制在安装时将$
目录复制到$
目录中。相反,这些目录的内容通常不同:除了安装到$
目录中供外部使用的头文件外,目录$
可能包含供项目内部使用的头文件,这些头文件是not已安装。虽然生成器表达式在本例中不相关,但我的印象是,PUBLIC\u标题
或INCLUDES
属性可用于安装接口中设置的目录\u INCLUDE\u目录
。在对文档进行更详细的审查后,我发现情况并非如此谢谢你的提示!
├── lib
│ └── libTest.so
├── Test.cmake
└── Test-noconfig.cmake