使用CMake + make仅运行一个测试

cyej8jka  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(218)

如果我的项目有一堆测试,我可以运行它们-在cmake ing和make ing之后构建,构建-使用make test
但是如果我只想运行我的一个测试呢?也就是说,在测试CMakeFile.txt中有add_test()的项目之一?

zpf6vheq

zpf6vheq1#

tl;dr-执行以下操作:

cd $YOUR_BUILD_DIRECTORY
ctest -R name_of_your_test

解释

下面是你可能会感到困惑的原因:
1.你尝试用make来做这件事,因为make test会为你运行所有的测试。这对单个测试不起作用(尽管有一个变通方法--参见@danger89的answer)。ctest是跨平台的方法。
1.您开始使用ctest,例如在您的主项目目录中,您可能会得到如下内容:

*********************************
 No test configuration file found!
 *********************************
 Usage

   ctest [options]

这没什么帮助。
1....所以你想“好吧,也许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

(note -R匹配一个正则表达式。)这应该可以工作。注意,您可以 * 列出 * 要运行的测试,而不是通过将-N传递给ctest来实际运行它们。

  • 感谢@RTsyvarev为我指明了正确的方向
  • 如果你的测试名称也是另一个测试名称的前缀,那么使用ctest -R '^name_of_your_test$'-参数实际上是一个正则表达式。
yc0p9oo0

yc0p9oo02#

einpoklum并不完全正确,实际上如果你愿意,你可以使用make test。CMake会生成一个Makefile,我发现它接受一个ARGS变量。
这意味着你可以通过-R(regex)参数来运行特定的测试。当使用make test时,它看起来像这样:

make test ARGS="-R '^test_'"

这将只运行文件名以test_开头的测试用例文件。

  • 注意:* -R上面只是一个示例,它将接受所有ctest命令也将接受的参数。

无论如何,上面的make测试示例将执行与运行完全相同的操作:

ctest -R '^test_'

相关问题