我必须处理CMake 3.x,Qt Creator 3.3.0,Qt 4.8.6,Windows中的Visual Studio 2008(以及Debian中很少使用Qt Creator + GCC)。
这条指令
由于在同一目录中混合调试和发布install(TARGETS $ {PROJECT} DESTINATION $ {CMAKE_INSTALL_PREFIX} / lib)
*.lib
文件,不舒服。我想将libs
保存在相应的子文件夹中。
我已尝试过here的以下说明:
安装(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
的命令行参数需要的差别很小。如果有标准的解决方案,我不想重新发明轮子。
答案 0 :(得分: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
要检测用户是从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}之前反斜杠的必要性。你应该自己测试一下