CTest add tests in subdirectories
我有一个基于CMake的项目,该项目包含几个子组件,所有这些子组件都可以独立编译和测试。目录布局如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | . ├── 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中,我有
1 2 3 |
在compX / tests / CMakeLists.txt中,我具有用于编译测试和
1 | No tests were found!!! |
玩了一点之后,结果发现,如果我将
1 2 3 |
有用。但是我发现将组件特定的内容放到根文件中非常丑陋和混乱。
相反,我尝试将
1 2 3 | ********************************* No test configuration file found! ********************************* |
真的没有办法在上面的目录结构中使用ctest吗?
CTest文档不是最清晰的。
我正在处理的项目具有类似的目录结构,该目录结构由各个单元组成,并且每个单元中都有src和tests子目录。
CMake文档说要在顶层CMakeLists.txt文件中调用" enable_testing()",并且进一步说该命令将"在当前目录及以下目录中启用CTest"。 听起来是递归的,对吧? 好吧,不是。
每个CMakeLists.txt必须调用enable_testing()才能在该目录中启用自动CTest发现。
因此,在您的项目中,顶层CMakeLists.txt将需要enable_testing(),然后comp {1,2} /CMakeLists.txt将需要它,最后comp {1,2} /tests/CMakeLists.txt将需要它。
添加这些命令并重新运行cmake后,这些目录将每个包含一个CTestTestfile.cmake文件,这是ctest程序运行时将查找的文件。