我必须在 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/