如何在CMake for Visual Studio中获取当前配置(发布/调试)

时间:2016-09-01 23:50:28

标签: c++ visual-studio visual-studio-2010 visual-studio-2012 cmake

我在Visual Studio 2013,CMake 3.5.1,Windows 10.我试图通过CMake复制一些文件,如下所示:

file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release)

是否可以将“Release”替换为代表如下配置的变量:

file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${Variable})

我试过了

file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})

但是当我使用消息将其打印出来时,CMAKE_BUILD_TYPE是一个空字符串,我也尝试了

file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>)

但由于某种原因,文件命令无法解密$<CONFIGURATION>,而命令如

add_custom_target(run COMMAND ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Test.exe)

即可。什么是正确的方法来提取Visual Studio目前是否在CMake中的Release或Debug中构建?

1 个答案:

答案 0 :(得分:5)

{CM}运行期间执行file命令,而不是在构建时(即VS运行时)执行。

这也意味着,不能使用生成器表达式(例如$<CONFIG>),因为这些是在构建时评估的。
提示:只要没有明确引用CMake文档中特定命令使用生成器表达式,该命令就不支持它们

为什么${CMAKE_BUILD_TYPE}为空的原因是由于你可能没有在调用CMake时指定它:

cmake -DCMAKE_BUILD_TYPE=Debug ..

但是,使用它,意味着只为 Debug 配置生成构建文件。那显然不是你想要的。

解决您的问题:使用生成器表达式是正确的方法,因为您已经使用add_custom_target(或add_custom_command)找到了。

您可以将自定义命令用作其他“真实”目标的依赖项,并且可以通过add_custom_command为特定目标指定post / / pre-build和pre-link命令。< / p>

正如文档所述COMMAND的{​​{1}}参数:

  

add_custom_command的参数可能使用生成器表达式。对生成器表达式中的目标名称的引用意味着目标级依赖项,但不是文件级依赖项。使用COMMAND选项列出目标名称以添加文件级依赖项。

在成功构建目标后复制文件:

DEPENDS