7

在我的 CMake 项目中,我有几个目标,它们只是运行一组特定的单元测试(例如runTestsForArunTestsForBrunTestsForC)。我还有一个目标,tests它取决于所有这些单元测试目标,因此我可以使用单个命令运行它们。

我正在使用 CLion 是我的 IDE,它默认尝试使用并行构建构建(我想要并且也在持续集成服务器上这样做)。但是,现在看起来测试也在并行运行,并且没有为此进行一些测试(它们使用本地环回对套接字进行一些魔术),这导致它们有时会失败。

这就是为什么我想为我的tests目标的一些/所有依赖项强制串行执行。不幸的是,当我搜索有关如何执行此操作的信息时,CMake 文档对我没有帮助。这让我想到了我的问题:这有可能吗?如果可以,怎么办?

4

2 回答 2

7

tests您可以使用 CTest 工具代替手动目标声明。使用add_test命令创建测试目标,然后 CMake 将自动创建tests将运行所有测试的目标:

enable_testing()
add_test(NAME TestsForA COMMAND <command>)
add_test(NAME TestsForB COMMAND <command>)
set_tests_properties(TestsForA TestsForB  PROPERTIES RUN_SERIAL TRUE)

之后,您可以运行make testsctest -j8 .在您的构建树中。测试将被序列化。

更多信息可以在以下位置找到:

于 2015-05-01T10:25:59.953 回答
0

也许它不是控制测试执行的最佳解决方案,但是,通常我相信您可以使用 CMake JOB_POOLS功能来限制项目中某些 CMake 目标的并行量。

首先,您声明命名池和每个池支持的并行作业数:

set_property(GLOBAL PROPERTY JOB_POOLS two_jobs=2 ten_jobs=10)

然后,您可以将目标分配给这些池:

set_property(TARGET myexe PROPERTY JOB_POOL_COMPILE ten_jobs)
于 2020-10-08T20:57:21.587 回答