cmake没有将目标移动到安装目录

Posted

技术标签:

【中文标题】cmake没有将目标移动到安装目录【英文标题】:cmake not moving targets to install directory 【发布时间】:2019-02-09 16:38:56 【问题描述】:

我的项目结构如下

ProjDir
| - CMakeLists.txt
| - SubDir1
| | - CMakeLists.txt
| | - src
| | - inc
| - SubDir2
| | - CMakeLists.txt
| | - src
| | - inc

我在每个子目录中都有目标,子目录包含在主CMakeLists.txt中,如下所示。

add_subdirectory($CMAKE_SOURCE_DIR/SubDir1)
add_subdirectory($CMAKE_SOURCE_DIR/SubDir2)

我在每个子目录中的目标都安装了 cmake 函数install。这些命令位于各个子目录的CMakeLists.txt 中,并且是针对每个目标指定的(参见this 帖子)。

install(TARGETS exe1 DESTINATION $CMAKE_INSTALL_PREFIX/bin CONFIGURATIONS Release)

虽然我能够成功编译,但install 命令不会将二进制文件移动到$CMAKE_INSTALL_PREFIX/bin,而是在生成输出后完成:

Install the project...
-- Install configuration: ""

我该如何解决这个问题?

【问题讨论】:

您可以从DESTINATION 中省略$CMAKE_INSTALL_PREFIX/。文档状态:“如果给出了相对路径,则相对于 CMAKE_INSTALL_PREFIX 变量的值进行解释。”由于您限制了要安装的 CONFIGURATIONS,您是在构建 Release 而不是 Debug?尝试将其删除以进行测试。 想到的另一件事,你的项目调用在哪里?只有***目录 CMakeLists.txt 应该包含项目调用。 我在每个子目录中进行项目调用。我现在已经纠正了这一点。另外,我删除了CONFIGURATIONS。这两件事解决了这个问题。 【参考方案1】:

在 Linux 上,默认构建配置为 empty:既不调试也不发布等。可以从 CMake 输出中轻松找到:

-- Install configuration: ""

因为您的install 命令是使用Release 配置“标记”的,所以默认情况下不会触发它(使用 配置)。

【讨论】:

以上是关于cmake没有将目标移动到安装目录的主要内容,如果未能解决你的问题,请参考以下文章

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

将 CMake 选项从命令行移动到*** CMakeLists.txt

将目标属性添加到 CMake 中现有的导入库

rm -移动文件

linux怎么将一个文件移动到另一个目录下

安装我的 NPM 包时将文件移动到根目录