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

Installation directory in CMakeLists.txt, suitable for Visual Studio and 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++ compiler 实现相同的输出?我是否应该将 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 还是从命令行构建,"there is a variable for that":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} 之前是否有必要使用反斜杠。你应该自己测试一下