繁体   English   中英

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

[英]How to get current configuration (Release/Debug) in CMake for Visual Studio

我在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中构建的正确方法是什么?

file命令在CMake运行时期间执行,而不是在构建时(即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命令。

正如文档所述的add_custom_commandCOMMAND参数:

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

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

add_custom_command(TARGET myTarget POST_BUILD
                   COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${IMAGE1}" "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/"
                   COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${IMAGE2}" "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/"
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM