Introduction
備忘録。
googletest は v1.8.1 から CMake、Pkg-config に対応しているが…
ソースからビルドした googletest を CMAKE_PREFIX_PATH を使って find_package によって利用しても、 GTest_INCLUDE_DIRS だけ見つからない。
- GTest_FOUND
- GTest_VERSION
- GTEST_LIBRARIES
は見つかる。
GOOGLETEST_INCLUDE_DIRS とか探してみたけどダメ。
そもそも、GTEST_LIBRARIES は接頭辞が大文字で通常のルールに沿ってない。
同じ問題は上がっている。
自分で googletest をビルドした場合がダメなのか…
How to do?
選択肢は
- ソースからビルド (make install なし)
- GTEST_INCLUDE_DIRS が見つからないのは変わらない
- apt-get install libgtest-dev
- GTEST_INCLUDE_DIRS は見つかるが、利用できるバージョンが固定
- ソースからビルド (make install あり)
- GTEST_INCLUDE_DIRS が見つからないのは変わらない
- /usr/local/include/gtest にインストールされるので自動的に見つかるがシステムに入るのは納得できない
- FetchContent_Declare
- 公式の手法
ソースからビルド (make install なし)
-D CMAKE_PREFIX_PATH="externals/googletest/v1.13.0/lib/cmake/GTest
のようにして、find_packge した結果は下記
1 | -- Found GTest: /home/user/Work/test/externals/googletest/v1.13.0/lib/cmake/GTest/GTestConfig.cmake (found version "1.13.0") |
apt-get install libgtest-dev
Ubuntu 20.04 での結果。
find_packge した結果は下記。
1 | -- Found GTest: /usr/lib/x86_64-linux-gnu/libgtest.a |
これを実行してしまうと /usr/include/gtest/gtest.h がインストールされるため、他の方法で GTEST_INCLUDE_DIRS が見つからなくても、ビルドが通るようになってしまう。
ソースからビルド (make install あり)
1 | $ cmake --build . --config Release |
find_packge した結果は下記。
1 | -- Found GTest: /usr/local/lib/cmake/GTest/GTestConfig.cmake (found version "1.13.0") |
/usr/lib よりも、**/usr/local/lib** が優先される模様。
FetchContent_Declare
公式ページで説明されている手順。
CMakeLists.txt
に下記のような記載を加えることで任意のバージョンの googletest を利用できる。
1 | cmake_minimum_required(VERSION 3.14) |
FetchContent_MakeAvailable
等が CMake 3.14 以降でしか使えないので注意。
最小のサンプルは下記。
1 | cmake_minimum_required(VERSION 3.14) |
target_include_directories
でヘッダーを指定しなくても動く。
(綺麗な環境で試験済み)