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 目录名称(安装目标)