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

5

我需要处理在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)

因为将Debug和Release的 *.lib 文件混合存放在同一个目录下,所以不是很方便。 我希望将 libs 存储在相应的子文件夹中。

我尝试了从here中给出的以下指令:

install(TARGETS ${PROJECT} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/\${BUILD_TYPE})

对于Visual Studio,它是一个多配置解决方案,我们通过反斜杠'\'传递${BUILD_TYPE}以进行进一步传播,这种方法非常有效。 但是,如何在Qt Creator + MS C++编译器中实现相同的输出呢?我应该将${CMAKE_BUILD_TYPE}(例如)分配给Debug(通过命令行界面),并使用特殊的自定义标志告诉CMake我们正在处理nmake / make吗?我的意思是有条件的安装指令,在Windows和Linux中都可以很好地工作,并且需要最小化CMake的命令行参数上的差异。如果有标准解决方案,我不想重复发明轮子。

1个回答

2
你看到了可以在编译时使用BUILD_TYPE变量来配置库的目标文件夹。这个方法只适用于Visual Studio。
在其他构建系统(如make,nmake,ninja等)中,你需要使用CMAKE_BUILD_TYPE变量,在配置时设置以获取相同的信息。在这种情况下,不同的配置(Debug和Release)必须在单独的构建文件夹中生成。在这些文件夹中,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还是命令行构建,"有一个变量可以做到这一点": 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()

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接