【问题标题】:How to get current configuration (Release/Debug) in CMake for Visual Studio如何在 CMake for Visual Studio 中获取当前配置(发布/调试)
【发布时间】:2017-01-09 23:33:21
【问题描述】:

我在 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>)

但由于某种原因,文件命令无法破译$&lt;CONFIGURATION&gt;,而类似命令

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

可以。在 CMake 中提取 Visual Studio 当前是在 Release 还是 Debug 中构建的正确方法是什么?

【问题讨论】:

  • 我还是不明白:我通过调用cmake -G "Visual Studio 15 2017 Win64" .. 制作了一个VS 解决方案,现在我有一个带有CMAKE_CONFIGURATION_TYPES=Debug;Release;MinSizeRel;RelWithDebInfo 的*.sln 项目(我猜这很标准)。我可以使用配置管理器(或下拉菜单)更改配置。如何在CMakeLists.txt 中检索当前选择的配置?
  • @Netherwire 您不知道在 CMake 配置期间选择了什么,这意味着在生成 sln 文件之前。 add_custom_target 有效,因为自定义目标是在手动或编程生成 sln 文件后调用的。

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


【解决方案1】:

file 命令在 CMake 运行时执行,而不是在构建时(即 VS 运行时)。

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

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

cmake -DCMAKE_BUILD_TYPE=Debug ..

但是,使用它意味着构建文件仅针对 Debug 配置生成。这显然不是你想要的。

解决您的问题:使用生成器表达式是正确的方法,正如您已经发现使用 add_custom_target(或 add_custom_command)。

您可以使用自定义命令作为其他“real”目标的依赖项,并且可以通过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>/"
)

【讨论】:

猜你喜欢
  • 2012-01-10
  • 2016-12-14
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2011-06-04
相关资源
最近更新 更多