我正在为我的cmake项目编写一个函数,需要从一个目标生成两个目标,并稍微修改其中一个:
option(BORG_STRIP_TEST_BINARIES OFF "Strip symbols from test binaries to reduce disk space usage" )
function(add_borg_test target)
add_test(${target} ${target} --gtest_color=yes)
if(BORG_STRIP_TEST_BINARIES)
# copy target, but make it optional
duplicate_target(FROM ${target} TO ${target}_debug )
set_target_properties(${target}_debug PROPERTIES EXCLUDE_FROM_ALL TRUE)
# alter
target_link_options(${target} PRIVATE -s)
endif()
endfunction()
所以它应该像这样工作:
- 我创建了一个二进制目标,它使用gtest。设置所有
target_link_libraries
和其他内容。示例名称为example-utests
- 不再添加通用的
add_test
,而是使用自定义的add_borg_test
- 现在
example-utests
链接带有标志-s
并包含在all
目标中。 example-utests_debug
不包括在all
目标中,但在显式请求时链接时不带有-s
。
如何根据上面的代码片段实现 duplicate_target
?
foreach
循环,例如foreach(_TARGET_NAME IN ITEMS target_foo target_bar) ...
并在循环结束后分配/覆盖任何一个目标独有的属性。哪种方法最适合取决于目标之间的差异。 - undefined