CMake:使用 exclude_from_all 在子目录中启用_testing

dib*_*dib 5 cmake

在我的顶级 CMakeLists.txt 中,我包含了一些外部库。如果我为我的项目启用测试并且外部库的 CMakeLists 也调用 enable_testing(),这些测试将添加到我自己的项目测试中,然后无法运行,因为没有构建库的测试。

我不希望构建测试,也不希望它们干扰我自己的项目测试。我怎样才能做到这一点?

在我的 CMakeLists.txt 中:

add_subdirectory(some_ext_lib EXCLUDE_FROM_ALL) ' some_ext_libs tests should not be built nor run

enable_testing()
add_subdirectory(my_own_stuff) ' here the tests should be run
[...]
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 0

当你使用的时候add_subdirectorysome_ext_lib就不再是外在的了。您已将其嵌入到您的 cmake 构建中。如果这是您想要做的,那么最简单的方法可能是添加变量和条件逻辑来控制some_ext_lib. 例如,在命令set(BUILD_TESTS_some_ext_lib 0)之前使用add_subdirectory,然后修改测试在逻辑内部的CMakeLists.txt文件。some_ext_libif (BUILD_TESTS_some_ext_lib)

请注意,为简单起见,通常应避免将一个项目的顶层 CMakeLists.txt嵌入到另一个项目中。也就是说,对于任何给定的 cmake 项目,应该只有一个CMakeLists.txt进行调用find_package并定义初始选项值。现在,任何概括都有有效的例外,但当你刚刚开始时,我认为你应该首先掌握简单的方法。

如果some_ext_lib确实是external,那么您应该让它安装其他项目将与find_package(some_ext_lib)命令一起使用的 cmake 配置文件。但这需要 cmake 更加复杂一些。