14

次の構造のプロジェクトがあります。

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 は、2 つの簡単なテストを提供する 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 でどのように機能するかを誤解しているだけですか?

4

2 に答える 2

28

問題の核心は、enable_testingこの場合、トップレベルの CMakeLists.txt から呼び出す必要があることです。include(CTest)トップレベルの CMakeLists.txt に追加すると、これが修正されます。

enable_testingこれにより、CTest サブモジュールが内部的に呼び出すため、test/CMakeLists.txtの呼び出しを削除できますenable_testing

于 2012-11-25T14:19:58.857 に答える