使用gtest和cmake / ctest时没有找到测试

时间:2012-11-25 10:29:41

标签: cmake googletest ctest

我有一个具有以下结构的项目:

linalg
├── build
├── CMakeLists.txt
├── docs
│   └── Doxyfile
├── include
│   └── linalg
│       └── vector3.hpp
├── src
│   ├── CMakeLists.txt
│   └── linalg
│       └── vector3.cpp
└── test
    ├── CMakeLists.txt
    └── linalg
        └── test_vector3.cpp

文件test_vector3.cpp是一个gtest单元测试文件,它提供了两个简单的测试。顶级CMakeLists.txt只是设置包含并添加src和test子目录:

cmake_minimum_required(VERSION 2.8)

project(linalg)

include_directories(include)
add_subdirectory(src)
add_subdirectory(test)

src / CMakeLists.txt文件将vector3.cpp编译成静态库:

cmake_minimum_required(VERSION 2.8)

add_library(linalg linalg/vector3.cpp)

test / CMakeLists.txt文件基于/usr/share/cmake-2.8/Modules/FindGTest.cmake中提供的示例:

cmake_minimum_required(VERSION 2.8)

enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

add_executable(test_vector3 linalg/test_vector3.cpp)
target_link_libraries(test_vector3 linalg ${GTEST_BOTH_LIBRARIES} pthread)

add_test(test_vector3 test_vector3)

然后我运行以下内容:

cd build
cmake ..
make

我在构建/ src中正确编译了liblinalg.a库,并在构建/测试中正确编译了test_vector3可执行文件。我可以运行test_vector3可执行文件,我从googletest获得输出说所有测试都已通过,但是如果我运行make test我没有输出任何输出,如果我运行ctest ..我收到一条消息说:< / p>

Test project /home/ryan/GitHub/linalg/build
No tests were found!!!

我有什么遗失的吗?或者我只是误解了ctest如何与gtest一起工作?

2 个答案:

答案 0 :(得分:20)

问题的症结在于,在这种情况下,应该从顶级CMakeLists.txt调用enable_testing。将include(CTest)添加到您的顶级CMakeLists.txt应该为您解决此问题。

这将允许您删除test / CMakeLists.txt中的enable_testing调用,因为CTest子模块在内部调用enable_testing

答案 1 :(得分:0)

只是为了更新它。

版本3.9中的cmake增加了对GoogleTest与CTest集成的支持。

因此,您现在可以让CTest扫描测试可执行文件中的所有测试宏,而不仅仅是整个可执行文件。

此处示例: https://gist.github.com/johnb003/65982fdc7a1274fdb023b0c68664ebe4