如何将多个导入的目标合并为一个



由于无法找到这个问题的答案,我决定把它贴在这里。 我正在尝试设置一个基于 cmake 的小型构建,但不确定我应该如何处理它。 我意识到这个问题涉及"如何"而不是"什么",但我对任何感觉不像黑客的替代解决方案持开放态度。

我需要添加一个后期构建命令来将一些(导入的(dll复制到目标的输出中:

add_custom_command(TARGET MyTarget POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:MyImportedDlls::All>
$<TARGET_FILE_DIR:MyTarget>
) 

我为导入的 dll 制作了一个"查找"脚本,为每个 dll 创建一个目标

set(LIB_FILES
"${PATH_TO_LIBS}/lib1.dll"
"${PATH_TO_LIBS}/lib2.dll"
"${PATH_TO_LIBS}/lib3.dll"
)
unset(TARGETS)
foreach(LIB_FILE ${LIB_FILES})
get_filename_component(FN ${LIB_FILE} NAME_WE)
add_library(MyImportedDlls::${FN} SHARED IMPORTED)
set_target_properties(MyImportedDlls::${FN} PROPERTIES IMPORTED_LOCATION "${LIB_FILE}")
list(APPEND TARGETS "MyImportedDlls::${FN}")
endforeach()

我的问题是:如何创建可以在自定义命令中使用的"组合"目标?

只需 3 个构建后命令,每个目标一个。

foreach(target IN LISTS TARGETS)
add_custom_command(TARGET MyTarget POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:${target}>
$<TARGET_FILE_DIR:MyTarget>
) 
endforeach()

相关内容

最新更新