2012-11-25 44 views
10

我有以下结构的项目:使用GTEST通过CMake时没有发现测试/ 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和测试子目录:

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) 

的测试/的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 

我得到正确编译的liblinalg.a库来编译/ src,并且我正确地编译了test_vector3可执行文件以编译/测试。我可以运行test_vector3可执行文件和我得到的输出googletest说,所有的测试都通过了,但是如果我跑make test我没有得到任何输出任何,如果我跑ctest ..我得到一个消息说:

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

有我错过了什么?还是我误解了ctest如何与gtest协同工作?

回答

19

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

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