如何使用cmake确定visual studio的当前构建类型

时间:2016-08-25 01:16:26

标签: visual-studio dll cmake

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

有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:2)

如果您想要 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_<CONFIG>)给出,这些属性预先填充了全局变量CMAKE_RUNTIME_OUTPUT_DIRECTORY(和CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>)。

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

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"
)

答案 1 :(得分:1)

先前的答案对我来说非常有用,但对我而言却不起作用,因此我对这些修改进行了修改以使其起作用:

  • 我将if $<CONFIG:Debug>替换为if $<CONFIG:Debug> neq 0,与if $<CONFIG:Release>相同
  • ${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}在我的情况下未定义,因此我将其替换为$<TARGET_FILE_DIR:myTarget>