我希望有一个Cmake函数,可以将一些二进制文件复制到特定的位置。为此,我有以下函数定义:
function ( collect_binaries TARGET_NAME DEST_DIR )
set ( targetsToCopy ${ARGN} )
set ( copy_cmd "COMMAND ${CMAKE_COMMAND} -E make_directory ${DEST_DIR}\n" )
foreach ( target ${targetsToCopy} )
LIST( APPEND copy_cmd "COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${DEST_DIR}$<TARGET_FILE_NAME:${target}>\n")
endforeach( target ${targetsToCopy} )
#message( FATAL_ERROR ${copy_cmd} )
add_custom_target( ${TARGET_NAME} )
add_custom_command( TARGET ${TARGET_NAME} PRE_BUILD ${copy_cmd} )
endfunction( collect_binaries )
以下是使用方法:
collect_binaries( bin_copy ${PROJECT_BINARY_DIR}/out/ target_1 target_2 target3 )
我在项目树中定义了 target_1、target_2 和 target_3。考虑到这一点,我得到了以下的 Cmake 配置输出:
在这里,似乎在该上下文中未知的目标...但它确实存在,并且没有拼写错误。问题在哪里?CMake 警告(dev):在 binary_copy.cmake 的第 15 行(add_custom_command 函数),policy CMP0040 没有设置:add_custom_command 函数 TARGET 签名中的目标必须存在。要查看政策详细信息,请运行“cmake --help-policy CMP0040”。使用 cmake_policy 命令来设置政策并按下面的示例抑制此警告。