CMake 更改强制 DESTINATION 目录名称(安装目标)

Posted

技术标签:

【中文标题】CMake 更改强制 DESTINATION 目录名称(安装目标)【英文标题】:CMake change forced DESTINATION directory name (install target) 【发布时间】:2019-12-27 03:49:47 【问题描述】:

我正在尝试将install 目标添加到我的库中。我的源代码和头文件位于src/ 下的子目录中。

我的CMakeLists.txt 文件的相关块:

install(
    TARGETS "$PROJECT_NAME"
    EXPORT ionir-config LIBRARY
    DESTINATION $CMAKE_INSTALL_LIBDIR # Destination is relative to $CMAKE_INSTALL_PREFIX.
)

install(
    EXPORT ionir-config
    NAMESPACE ionir::
    DESTINATION $CMAKE_INSTALL_LIBDIR/cmake/ionir
)

install(
    DIRECTORY src
    DESTINATION $CMAKE_INSTALL_INCLUDEDIR
    FILES_MATCHING PATTERN "*.h" PATTERN "LICENSE" # Match only header files & LICENSE file.
)

问题是一旦安装,输出目录的名称是src:

我希望它是ionir,否则我必须像这样导入文件:

#include <ionir/src/something/file.h>
                ^^^

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

为避免在安装路径中添加目录名称,请使用 斜杠 (/) 终止目录:

install(
    DIRECTORY src/
    ...
)

install 命令的文档中明确说明了这一点:

每个目录名称的最后一个组件都附加到目标目录,但可以使用尾部斜杠来避免这种情况,因为它会将最后一个组件留空。

【讨论】:

以上是关于CMake 更改强制 DESTINATION 目录名称(安装目标)的主要内容,如果未能解决你的问题,请参考以下文章

如何强制CMake重新链接项目资源变化?

如何方便地强制 CMAKE 使用特定版本的静态库文件?

如何强制 CMake 使用系统上安装的特殊版本的 Protobuf?

如果存在多个依赖项,则强制 cmake 选择依赖位置

cmake基础教程(38)导出项目install export

cmake基础教程(38)导出项目install export