У меня есть проект со следующей структурой:
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 unit test, который предоставляет два простых теста. Верхний уровень 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
Я получаю библиотеку liblinalg.a, скомпилированную правильно для сборки /src, и я получаю исполняемый файл test_vector3, скомпилированный правильно для сборки/тестирования. Я могу запустить исполняемый файл test_vector3, и я получаю вывод от googletest, говорящий, что все тесты прошли, но если я запустил make test
, я не получаю никакого вывода, и если я запустил ctest ..
, я получаю сообщение с сообщением:
Test project /home/ryan/GitHub/linalg/build
No tests were found!!!
Есть ли что-то, что мне не хватает? Или я просто неправильно понял, как ctest работает с gtest?