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

ily*_*lya 5 c++ cmake qt-creator visual-studio

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

这个指令

安装(目标 ${PROJECT} 目的地 ${CMAKE_INSTALL_PREFIX}/lib)

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

我从这里尝试了以下说明:

安装(目标 ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/\${BUILD_TYPE})

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

Ant*_*ane 2

您看到可以在编译时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
Run Code Online (Sandbox Code Playgroud)

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

解决方案可以是这样的

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()
Run Code Online (Sandbox Code Playgroud)

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