我有一个具有以下结构的项目:
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
我将 liblinalg.a 库正确编译到 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 一起工作?
最佳答案
问题的关键是在这种情况下应该从顶级 CMakeLists.txt 调用 enable_testing
。将 include(CTest)
添加到您的顶级 CMakeLists.txt 应该会为您解决这个问题。
这将允许您删除 test/CMakeLists.txt 中的 enable_testing
调用,因为 CTest 子模块在内部调用 enable_testing
。
关于cmake - 将 gtest 与 cmake/ctest 一起使用时未发现任何测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13550153/