>我有一个具有以下结构的项目:
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可执行文件来构建/测试。 我可以运行test_vector3可执行文件,并从googletest获得输出,说所有测试都已通过,但是如果我运行make test
则不会得到任何输出,如果我运行ctest ..
则会收到一条消息:
Test project /home/ryan/GitHub/linalg/build
No tests were found!!!
我错过了什么吗?还是我只是误解了 ctest 如何与 gtest 一起工作?
问题的症结在于.txt在这种情况下,应该从顶级 CMakeList 调用enable_testing
。 将include(CTest)
添加到顶级 CMakeList .txt应该会为您解决此问题。
这将允许您删除 test/CMakeLists.txt 中的enable_testing
调用,因为 CTest 子模块调用enable_testing
内部的。
只是为了更新这个。
cmake 在 3.9 版本中增加了对 GoogleTest 与 CTest 集成的支持。
因此,您现在可以让 CTest 抓取测试可执行文件中的所有测试宏,而不仅仅是整个可执行文件。
这里的例子:https://gist.github.com/johnb003/65982fdc7a1274fdb023b0c68664ebe4