Cmake:几个使用自定义目标进行测试的项目

时间:2017-07-12 18:39:27

标签: c++ git cmake git-submodules

假设我有一个库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-testsProjectA中执行ProjectB app.yaml

那么,有没有办法在本地为cmake项目定义自定义目标?还是有一种聪明的方式去做我想做的事情? (这似乎很自然)

2 个答案:

答案 0 :(得分:0)

  

那么,有没有办法在本地为cmake项目定义自定义目标?还是有一种聪明的方式去做我想做的事情? (这似乎很自然)

如果您正在使用自定义目标,可能ALLOW_DUPLICATE_CUSTOM_TARGETS可以完成这项工作 文档非常清楚:

  

允许创建重复的自定义目标。

如果你走得更远,你会发现:

  

该属性允许在不同目录中进行多个add_custom_target命令调用以指定相同的目标名称。

不幸的是,它也有一些限制:

  

[...]设置此属性将导致非Makefile生成器产生错误并拒绝生成项目。

仔细阅读文档(请参阅上面的链接),了解它是否适​​合您的用途。

答案 1 :(得分:0)

I think I found a better solution. Let us assume:

  1. You have control of the CMakeLists.txt file in both projects.
  2. The shared target is expected to be configured identically.

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.