ctest 抱怨“找不到测试配置文件!”

Ing*_*ngo 6 debian cmake ctest

通过CMake,我尝试使用CTest执行简单的测试。我将此配置全部放在一个目录中 (${CMAKE_SOURCE_DIR}):

~$ cat hello.cpp
#include <iostream>

int main() {
    std::cout << "hello world\n";
    return(0);
}

~$ cat CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(TEST_CTEST)

enable_testing()
add_executable(test_ctest hello.cpp)
add_test(my_test ./build/test_ctest)
Run Code Online (Sandbox Code Playgroud)

然后我执行:

~$ rm -rf Testing/ build/
~$ cmake -S . -B build
~$ cmake --build build
~$ ./build/test_ctest
hello world

~$ ctest
*********************************
No test configuration file found!
*********************************
Usage

  ctest [options]
Run Code Online (Sandbox Code Playgroud)

我在其他问答中发现的唯一提示是放入enable_testing()root 中CMakeLists.txt。我觉得我错过了一件小事,但我找不到什么。

如何使用 CTest 运行测试?

Tsy*_*rev 9

该宏enable_testing()在构建目录中创建 ctest 配置文件。要找到此文件,需要从该构建ctest目录运行。

从源目录运行ctest没有任何意义,因为它看不到 CMake 的结果(除非您进行源内构建)。

  • “除非你进行源内构建”......你绝对不应该这样做。 (2认同)

Jul*_*eiß 7

@Tsyvarev 的答案并不完全正确。您不仅必须从构建目录执行ctest,还必须从构建目录内的相对文件夹执行,其中enable_testing()相对于CMAKE_SOURCE_DIR目录被调用。

因此,例如,当CMakeLists.txt, 调用enable_testing()位于proj/tests并且您的构建目录是proj/build. 然后你就得跑ctest进去proj/build/tests