我不知道如何使用Cmake在Visual Studio中配置多个构建类型。
例如,在Visual Studio中选择 debug 时,我需要将*d.dll
复制到${CMAKE_BINARY_DIR}/rundir/debug/bin
,并且在Visual Studio中选择 release 时,我需要将*.dll
复制到${CMAKE_BINARY_DIR}/rundir/release/bin
。
有人可以告诉我该怎么做吗?
答案 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>