Тесты не найдены при использовании 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 просто устанавливает includes и добавляет подкаталоги 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)
тест/CMakeLists.файл txt основан на примере, приведенном в / usr / share/cmake-2.8/модули / 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.библиотека, скомпилированная правильно в build/src, и я получаю исполняемый файл test_vector3, скомпилированный правильно в build / test. Я могу запустить исполняемый файл test_vector3, и я получаю результат от googletest, говоря, что все тесты прошли, однако, если я запускаю make test
Я не получаю никакого вывода, и если я запускаю ctest ..
Я получаю сообщение говорит:
Test project /home/ryan/GitHub/linalg/build
No tests were found!!!
есть ли что-то, чего мне не хватает? Или я просто неправильно понял, как ctest работает с gtest?
2 ответов
суть проблемы в том, что enable_testing
следует вызывать из ваших CMakeLists верхнего уровня.txt в этом случае. Добавление include(CTest)
для ваших CMakeLists верхнего уровня.txt должен исправить это для вас.
Это позволит вам удалить enable_testing
вызовите тест / CMakeLists.txt, так как подмодуль CTest вызывает enable_testing
внутренне.
просто обновлять.
cmake в версии 3.9 добавлена поддержка интеграции GoogleTest с CTest.
теперь вы можете заставить CTest очистить все тестовые макросы в тестовом исполняемом файле, а не только весь исполняемый файл.
пример здесь: https://gist.github.com/johnb003/65982fdc7a1274fdb023b0c68664ebe4