【发布时间】:2015-11-13 15:40:09
【问题描述】:
我想要一个 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):
策略 CMP0040 未设置:add_custom_command() 的 TARGET 签名中的目标必须存在。运行“cmake --help-policy CMP0040” 了解政策详情。使用 cmake_policy 命令设置策略并禁止显示此警告。
在这种情况下,目标似乎是未知的......但它确实存在并且没有错字。这里有什么问题?
【问题讨论】:
-
我尝试用自定义命令做和你一样的事情,可能但很难看。你真正想要做的是将二进制文件安装到一个位置,更少的代码和更好的
标签: cmake cmake-custom-command