【发布时间】:2019-02-07 04:01:24
【问题描述】:
在 CMake 中,可以使用add_subdirectory(foo EXCLUDE_FROM_ALL) 将foo 下定义的目标排除在默认构建之外除非其他目标需要它们,如下所示:
add_subdirectory(foo EXCLUDE_FROM_ALL)
add_custom_target(wanted_foo_targets ALL DEPENDS
bar_tool # only build bar_tool from foo
)
假设 foo 定义了两个目标,bar_tool 和 foo_tool,并对每个目标进行测试:
add_test(NAME test_foo_tool COMMAND foo_tool)
add_test(NAME test_bar_tool COMMAND bar_tool)
当你构建整个项目时,foo_tool 没有被构建,因为它不是任何东西的依赖,但bar_tool 被构建是因为它是wanted_foo_targets 的依赖。
但是 CTest 仍然注册了 test_foo_tool 工具,现在该工具失败了,因为 foo_tool 不存在。
我可以删除/隐藏/跳过引用未构建目标的测试吗?我知道我可以使测试命令类似于[ -f foo_tool ] && foo_tool,但这会错误地表明测试通过了。
如果我可以从父目录执行此操作,而无需修改 foo 中的测试设置方式,则可以获得奖励积分。就我而言,foo 是第三方提供的项目,我不想在他们编写新测试时维护他们的代码补丁。
【问题讨论】:
标签: cmake