gpt4 book ai didi

c++ - CPack:存档中缺少接口(interface)包含目录

转载 作者:行者123 更新时间:2023-11-28 04:47:46 25 4
gpt4 key购买 nike

我正在使用 CMake 3.10.1 并尝试使用 CPack 为库生成文件,但我无法让它将接口(interface)包含目录添加到文件中。

库和生成的导出文件按预期添加,但是包含目录(使用 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)

我的源目录的内容:

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

cpack -G TGZ 生成的 tgz 的内容。

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

知道为什么它会丢失 inc 目录吗?

最佳答案

类似生成器的表达式 $<INSTALL_INTERFACE>用于 target_include_directories()命令本身不会安装相应的目录。您需要手动安装此目录(使用 install(FILES)install(DIRECTORY) )。


表达式 $<INSTALL_INTERFACE>为配置文件中的目标指定接口(interface)包含目录,导出安装树(参见install(EXPORT) 命令)。

表达式 $<BUILD_INTERFACE>指定的接口(interface)包括项目本身中目标的目录,以及导出构建树的配置文件中(参见 EXPORT() 命令)。

但是这些表达式并不强制执行 $<BUILD_INTERFACE>要复制到的目录 $<INSTALL_INTERFACE>一个关于安装。相反,这个目录的内容通常不同:除了供外部使用的头文件外,安装到$<INSTALL_INTERFACE>中。目录,一个目录$<BUILD_INTERFACE>可能包含未安装的供项目内部使用的头文件。

关于c++ - CPack:存档中缺少接口(interface)包含目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com