如果我的项目有一堆测试,我可以运行它们 - 在cmakeing 和makeing 构建、构建之后 - 使用make test.
但是,如果我只想运行其中一项测试怎么办?也就是说,我add_test()在测试中拥有的项目之一CMakeFile.txt?
ein*_*ica 22
tl;dr - 这样做:
cd $YOUR_BUILD_DIRECTORY
ctest -R name_of_your_test
Run Code Online (Sandbox Code Playgroud)
以下是您可能感到困惑的方式:
你试图用 来做这件事make,因为make test它为你运行了所有的测试。这不适用于单个测试(尽管有解决方法 - 请参阅@danger89 的答案)。ctest是跨平台的方式来做到这一点。
您开始使用ctest, 例如在您的主项目目录中,您可能会得到如下内容:
*********************************
No test configuration file found!
*********************************
Usage
ctest [options]
Run Code Online (Sandbox Code Playgroud)
这没有帮助。
... 所以你想“好吧,也许ctest有一个-C开关,比如 CMake 和 GNU Make”——事实上,它有一个-C开关!但这并没有达到您的预期:
[joeuser:/home/joeuser/src/myproj]$ ctest -C build
Test project /home/joeuser/src/myproj
No tests were found!!!
Run Code Online (Sandbox Code Playgroud)
你实际需要做的:
cd $YOUR_BUILD_DIRECTORY
ctest -R name_of_your_test
Run Code Online (Sandbox Code Playgroud)
(注意-R匹配正则表达式。)这应该有效。请注意,您可以列出要运行的测试,而不是通过传递-N到 来实际运行它们ctest。
感谢@RTsyvarev 为我指明了正确的方向
einpoklum 并不完全正确。make test其实只要你喜欢就可以用。CMake 将生成一个 Makefile,我发现它接受一个ARGS变量。
这意味着您可以通过 -R(正则表达式)参数运行特定测试。使用 make test 时将如下所示:
make test ARGS="-R '^test_'"
Run Code Online (Sandbox Code Playgroud)
test_这将仅运行文件名中以 开头的测试用例文件。
注意: -R上面只是一个示例,它也将接受命令将接受的所有参数ctest。
无论如何,上面的 make test 示例将与运行完全相同:
ctest -R '^test_'
Run Code Online (Sandbox Code Playgroud)