【问题标题】:How to determine current build type of visual studio with cmake如何使用 cmake 确定 Visual Studio 的当前构建类型
【发布时间】:2017-01-01 07:04:55
【问题描述】:

我不知道如何在 Visual Studio 中使用 Cmake 配置多种构建类型。 例如,在Visual Studio中选择debug时,我需要将*d.dll复制到${CMAKE_BINARY_DIR}/rundir/debug/bin,而在Visual Studio中选择release时,我需要复制@ 987654323@转${CMAKE_BINARY_DIR}/rundir/release/bin

谁能告诉我该怎么做?

【问题讨论】:

  • 您是指成功后构建 意义上的复制 还是实际的安装 步骤?你知道吗,你可以使用生成器表达式来指定依赖于构建类型的位置?
  • DLL 是另一个目标的产品吗?
  • 。我找到了解决方案。我在 cmake 中使用 Visual Studio 的 $(configuration) 变量,如下所示: add_custom_command(TARGET obs POST_BUILD COMMAND if $(ConfigurationName) == Debug ( xcopy /y /d "$(QTDIR)\\bin\\Qt5WebKitWidgetsd.dll" " $(SolutionDir)rundir\\$(Configuration)\\bin\\64bit" \n ) else (//做点什么)
  • 您可以将其添加/编辑到您的问题中以稍微改进它。您的解决方案只有一个问题:它不独立于平台,也不以 VS-/MSBuild 为中心。我已经使用 CMake 的平台抽象发布了一个答案。

标签: visual-studio dll cmake


【解决方案1】:

如果您想要 post-build 操作,则有一个 CMake 命令以及可用的适当变量。

使用 CMake 复制文件的平台无关命令使用 CMake itself on the command line:

${CMAKE_COMMAND} -E copy_if_different "${src}" "${dest}"

可以使用generator expressions提取“当前”配置:

$<CONFIG>

甚至直接测试真实性

$<CONFIG:Debug>

目标二进制文件(即可执行文件和共享库/DLL)的输出目录由目标属性RUNTIME_OUTPUT_DIRECTORY(和RUNTIME_OUTPUT_DIRECTORY_&lt;CONFIG&gt;)提供,这些属性预先填充了全局变量CMAKE_RUNTIME_OUTPUT_DIRECTORY(和@987654331) @)。

最后,我们可以编写构建后命令

add_custom_command(TARGET myTarget POST_BUILD
                   COMMAND if $<CONFIG:Debug> ("${CMAKE_COMMAND}" -E copy_if_different "${path_to_dependent_dll}/dependent.dll" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}")
                   COMMAND if $<CONFIG:Release> ("${CMAKE_COMMAND}" -E copy_if_different "${path_to_dependent_dll}/dependent.dll" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}")
                   COMMENT "Copying dependent DLL"
)

【讨论】:

    【解决方案2】:

    上一个答案对我很有用,但对我不起作用,所以我进行了这些修改以使其起作用:

    • 我将if $&lt;CONFIG:Debug&gt; 替换为if $&lt;CONFIG:Debug&gt; neq 0if $&lt;CONFIG:Release&gt; 也是如此
    • ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE} 在我的情况下没有定义,所以我将它们替换为 $&lt;TARGET_FILE_DIR:myTarget&gt;

    【讨论】:

    • 我也是,谢谢 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多