假设我有一个库ProjectA
,我在我的CMakefile中定义了一个自定义目标build-tests
来构建我的测试,以便我之后可以make test
。 (见CMake & CTest : make test doesn't build tests)。
然后,我有第二个库ProjectB
取决于ProjectA
。我使用git子模块,这样我就可以在add_subdirectory(ProjectA)
的CMakefile中执行ProjectB
。问题是,我想做同样的事情:定义一个自定义目标build-tests
来构建ProjectB
的测试,但我不能,因为它已经在ProjectA
中定义了...
我的问题类似于How to handle a transitive dependency conflict using Git submodules and CMake?和CMake and using git-submodule for dependence projects,但他们可以定义一个目标以避免这种情况,而我希望能够在make build-tests
和ProjectA
中执行ProjectB
app.yaml
。
那么,有没有办法在本地为cmake项目定义自定义目标?还是有一种聪明的方式去做我想做的事情? (这似乎很自然)
答案 0 :(得分:0)
那么,有没有办法在本地为cmake项目定义自定义目标?还是有一种聪明的方式去做我想做的事情? (这似乎很自然)
如果您正在使用自定义目标,可能ALLOW_DUPLICATE_CUSTOM_TARGETS
可以完成这项工作
文档非常清楚:
允许创建重复的自定义目标。
如果你走得更远,你会发现:
该属性允许在不同目录中进行多个
add_custom_target
命令调用以指定相同的目标名称。
不幸的是,它也有一些限制:
[...]设置此属性将导致非Makefile生成器产生错误并拒绝生成项目。
仔细阅读文档(请参阅上面的链接),了解它是否适合您的用途。
答案 1 :(得分:0)
I think I found a better solution. Let us assume:
CMakeLists.txt
file in both projects.Then you can do something like:
if(NOT TARGET build-tests)
add_custom_target(build-tests ALL)
endif()
add_custom_target(build-tests.ProjectA ...)
add_dependencies(build-tests build-tests.ProjectA)
The build-tests
target will essentially become the union of each project's build-tests
target.