c++ - CMakeLists.txt中的安装目录,适用于Visual Studio和Qt Creator

标签 c++ visual-studio cmake qt-creator

我必须在 Windows 中处理 CMake 3.x、Qt Creator 3.3.0、Qt 4.8.6、Visual Studio 2008(很少在 Debian 中处理 Qt Creator + GCC)。

这条指令

install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)

因为在同一目录中混合调试和发布 *.lib 文件而感到不舒服。我想将 libs 保存在相应的子文件夹中。

我已经尝试了来自 here 的以下说明:

install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/\${BUILD_TYPE})

它适用于 Visual Studio,因为它是一个多配置解决方案,我们传递 ${BUILD_TYPE},由反斜杠 '\' 保护以进一步传播。 但是如何为 Qt Creator + MS C++ 编译器 实现相同的输出?我是否应该将 Debug(例如)分配给 ${CMAKE_BUILD_TYPE}(通过命令行界面)和特殊的自定义标志,告诉 CMake 我们处理 nmake/make?我的意思是有条件的安装指令,它在 Windows 和 Linux 中都可以正常工作,并且 CMake 的命令行参数需要最小的差异。如果有标准解决方案,我不想重新发明轮子。

最佳答案

您看到可以使用 BUILD_TYPE 变量在编译时设置 在安装时配置库的目标文件夹。这是特定于 Visual Studio 的。

在其他构建系统(make、nmake、ninja 等)中,您必须使用 CMAKE_BUILD_TYPE 变量,在配置时设置 以检索相同的信息。在这种情况下,如您所见,必须在单独的构建文件夹中生成不同的配置(调试和发布)。在这些文件夹中,CMake 生成步骤是使用 CMAKE_BUILD_TYPE 变量中的正确值完成的。示例:

cd /home/user/project/xx_project/build_release
cmake -DCMAKE_BUILD_TYPE=Release /home/user/project/xx_project/src
cd /home/user/project/xx_project/build_debug
cmake -DCMAKE_BUILD_TYPE=Debug /home/user/project/xx_project/src

要检测用户是从 Visual Studio 还是从命令行构建,“有一个变量”:The MSVC_IDE Cmake variable

解决方案可以是这样的

if(MSVC_IDE)
  install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/\${BUILD_TYPE})
else()
  install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_BUILD_TYPE})
endif()

我不完全确定 ${CMAKE_BUILD_TYPE} 之前的反斜杠的必要性。你应该自己测试一下

关于c++ - CMakeLists.txt中的安装目录,适用于Visual Studio和Qt Creator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847936/

相关文章:

c++ - 线程间的信号

c++ - 标识符未在宏中定义

sql - 如何使用 VS2008 服务器资源管理器在 SQLite 中创建表

c - 使用 cmake 编译时 Valgrind 不显示行号

c++ - Cmake 重新生成变量变化

android - 将 CMake 和 ndk-build 外部库集成到 Android Studio 项目中

c++ - C++中的转义码常量

c++ - Cereal——多重反序列化

.net - Visual Studio 解决方案项目引用或 Dll 引用

c# - Visual Studio 引用不再存在的命名空间