CTest 在子目录中添加测试
CTest add tests in subdirectories
我有一个基于CMake的项目,由多个子组件组成,都可以独立编译和测试。目录布局如下所示:
.
├── CMakeLists.txt
├── comp1
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── foo.cc
│ │ └── foo.h
│ └── tests
│ ├── CMakeLists.txt
│ └── test_comp1.cc
└── comp2
├── CMakeLists.txt
├── src
│ ├── bar.cc
│ └── bar.h
└── tests
├── CMakeLists.txt
└── test_comp2.cc
我想启用 ctest,因此在根 CMakeLists.txt 中我有 include(CTest)
并且在组件特定的 CMakeLists.txt 文件中我有
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
在compX/tests/CMakeLists.txt 中我有编译测试的代码和add_test()
命令。测试已成功编译,我可以手动 运行 它们。但是,如果我调用 ctest
,它会 returns
No tests were found!!!
玩了一会儿之后,发现如果我将 add_subdirectory(tests)
调用移动到根目录 CMakeLists.txt,如下所示:
if(BUILD_TESTING)
add_subdirectory(comp1/tests)
endif()
有效。但是我发现将特定于组件的内容放入根文件中非常丑陋和混乱。
相反,我尝试将 include(CTest)
命令向下移动一级到组件特定的 CMakeLists.txt。但是 ctest
抱怨这个:
*********************************
No test configuration file found!
*********************************
真的没有办法使用像上面这样的目录结构的 ctest 吗?
CTest 文档不是最清楚的。
我正在做的一个项目有一个类似的目录结构,由各种单元组成,每个单元中都有 src 和 tests 子目录。
CMake 文档说在顶层 CMakeLists.txt 文件中调用 "enable_testing()",它进一步说这个命令将 "enable CTest at the current directory and below." 这听起来是递归的,对吧?嗯,不是。
每个 CMakeLists.txt 都必须调用 enable_testing() 以在该目录中启用自动 CTest 发现。
因此,在您的项目中,顶层 CMakeLists.txt 将需要 enable_testing(),然后是 comp{1,2}/CMakeLists.txt,最后是 comp{1 ,2}/tests/CMakeLists.txt 将需要它。
添加这些命令并重新运行 cmake 后,这些目录将各自包含一个 CTestTestfile.cmake 文件,这是 ctest 程序在运行时将查找的文件。
我有一个基于CMake的项目,由多个子组件组成,都可以独立编译和测试。目录布局如下所示:
.
├── CMakeLists.txt
├── comp1
│ ├── CMakeLists.txt
│ ├── src
│ │ ├── foo.cc
│ │ └── foo.h
│ └── tests
│ ├── CMakeLists.txt
│ └── test_comp1.cc
└── comp2
├── CMakeLists.txt
├── src
│ ├── bar.cc
│ └── bar.h
└── tests
├── CMakeLists.txt
└── test_comp2.cc
我想启用 ctest,因此在根 CMakeLists.txt 中我有 include(CTest)
并且在组件特定的 CMakeLists.txt 文件中我有
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
在compX/tests/CMakeLists.txt 中我有编译测试的代码和add_test()
命令。测试已成功编译,我可以手动 运行 它们。但是,如果我调用 ctest
,它会 returns
No tests were found!!!
玩了一会儿之后,发现如果我将 add_subdirectory(tests)
调用移动到根目录 CMakeLists.txt,如下所示:
if(BUILD_TESTING)
add_subdirectory(comp1/tests)
endif()
有效。但是我发现将特定于组件的内容放入根文件中非常丑陋和混乱。
相反,我尝试将 include(CTest)
命令向下移动一级到组件特定的 CMakeLists.txt。但是 ctest
抱怨这个:
*********************************
No test configuration file found!
*********************************
真的没有办法使用像上面这样的目录结构的 ctest 吗?
CTest 文档不是最清楚的。
我正在做的一个项目有一个类似的目录结构,由各种单元组成,每个单元中都有 src 和 tests 子目录。
CMake 文档说在顶层 CMakeLists.txt 文件中调用 "enable_testing()",它进一步说这个命令将 "enable CTest at the current directory and below." 这听起来是递归的,对吧?嗯,不是。
每个 CMakeLists.txt 都必须调用 enable_testing() 以在该目录中启用自动 CTest 发现。
因此,在您的项目中,顶层 CMakeLists.txt 将需要 enable_testing(),然后是 comp{1,2}/CMakeLists.txt,最后是 comp{1 ,2}/tests/CMakeLists.txt 将需要它。
添加这些命令并重新运行 cmake 后,这些目录将各自包含一个 CTestTestfile.cmake 文件,这是 ctest 程序在运行时将查找的文件。