gpt4 book ai didi

cmake - CTest 在子目录中添加测试

转载 作者:行者123 更新时间:2023-12-03 20:29:04 24 4
gpt4 key购买 nike

我有一个基于 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 , 它返回
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()”,并进一步说该命令将“在当前目录及以下目录启用 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 程序在运行时将查找的文件。

关于cmake - CTest 在子目录中添加测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com