gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:41:22 44 4
gpt4 key购买 nike

在我的顶级 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
[...]

最佳答案

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

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

some_ext_lib真的是外部的,那么你应该让它安装其他项目将使用的 cmake 配置文件 find_package(some_ext_lib)命令。但这需要更复杂的 cmake。

关于CMake:使用 exclude_from_all 在子目录中启用_testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35288855/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com