如果我的项目有一堆测试,我可以运行它们 - 在 cmake
ing 和 make
ing 构建之后,构建 - 使用 make test
。
但是如果我只想运行其中一个测试怎么办?也就是说,我在测试 CMakeFile.txt
中有一个 add_test()
的项目之一?
最佳答案
tl;dr - 这样做:
cd $YOUR_BUILD_DIRECTORY
ctest -R name_of_your_test
解释
以下是您可能会感到困惑的原因:
您尝试使用
make
执行此操作,因为make test
会为您运行所有测试。这不适用于单个测试(尽管有一个解决方法 - 请参阅@danger89 的 answer)。ctest
是实现它的跨平台方式。您开始使用
ctest
,例如在你的主项目目录中,你可能会得到类似这样的东西:********************************* No test configuration file found! ********************************* Usage ctest [options]
这没有帮助。
... 所以你认为“好吧,也许
ctest
有一个-C
开关,就像 CMake 和 GNU Make” - 事实上,它有一个-C
开关!但这并没有达到您的预期:[joeuser:/home/joeuser/src/myproj]$ ctest -C build Test project /home/joeuser/src/myproj No tests were found!!!
你实际需要做的:
cd $YOUR_BUILD_DIRECTORY
ctest -R name_of_your_test
(注意 -R
匹配一个正则表达式。)这应该有效。请注意,您可以列出要运行的测试,而不是通过将 -N
传递给 ctest
来实际运行它们。
* 感谢@RTsyvarev 为我指明了正确的方向
* 如果您的测试名称也是另一个测试名称的前缀,请使用 ctest -R '^name_of_your_test$'
- 参数实际上是一个正则表达式。
关于testing - 使用 CMake + make 只运行一个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54160415/