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

时间:2015-03-04 06:28:38

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

我必须处理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的命令行参数需要的差别很小。如果有标准的解决方案,我不想重新发明轮子。

1 个答案:

答案 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}之前反斜杠的必要性。你应该自己测试一下