2012-11-25 9 views
10

Ich habe ein Projekt mit folgenden Struktur:Keine gefundene Tests bei Gtest mit cmake mit/ctest

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

Die Datei test_vector3.cpp ist eine Gtest Unit-Test-Datei, die zwei einfache Tests zur Verfügung stellt. Die oberste Ebene CMakeLists.txt einfach einrichtet die enthält und fügt die src und Testverzeichnisse:

cmake_minimum_required(VERSION 2.8) 

project(linalg) 

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

Die src/CMakeLists.txt Datei vector3.cpp in eine statische Bibliothek kompiliert:

cmake_minimum_required(VERSION 2.8) 

add_library(linalg linalg/vector3.cpp) 

Die Test/CMakeLists.txt Datei auf dem Beispiel in /usr/share/cmake-2.8/Modules/FindGTest.cmake vorgesehen basiert:

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) 

ich folgendes dann laufen:

cd build 
cmake .. 
make 

Ich bekomme die liblinalg.a-Bibliothek korrekt kompiliert in Build/src und ich bekomme die test_vector3 ausführbare Datei in Build/Test korrekt kompiliert. Ich kann die test_vector3 ausführbare Datei ausführen, und ich bekomme die Ausgabe von googletest sagen, dass alle Tests bestanden haben, aber wenn ich laufen make test ich keine Ausgabe überhaupt erhalten und wenn ich ctest .. laufen bekomme ich eine SMS-Nachricht::

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

Gibt es etwas, das ich vermisse? Oder habe ich gerade missverstanden, wie ctest mit gtest funktioniert?

Antwort

19

Der Kern des Problems ist, dass in diesem Fall enable_testing von Ihrem Top-Level CMakeLists.txt aufgerufen werden sollte. Das Hinzufügen von 10 zu Ihrer Top-Level CMakeLists.txt sollte dies für Sie beheben.

Damit können Sie den Aufruf in Test/CMakeLists.txt enable_testing entfernen, da das CTest-Submodul intern enable_testing aufruft.