GoogleTest 手動ビルド手順

このドキュメントでは、GoogleTest を Linux および Windows 環境で手動ビルドする手順を説明します。

通常は GitHub Actions が自動的にビルドしますが、カスタムビルドが必要な場合はこの手順を参照してください。

source: google/googletest

1 このレポジトリで提供されるビルド構成

Linux:
- RelWithDebInfo (最適化あり、デバッグ情報あり)

Windows:
- /MD (MultiThreadedDLL, RelWithDebInfo)
- /MDd (MultiThreadedDebugDLL, Debug)
- /MT (MultiThreaded, RelWithDebInfo)
- /MTd (MultiThreadedDebug, Debug)

2 Linux 環境でのビルド

Linux 環境で gcc/g++ を使用して静的ライブラリ (.a) をビルドする手順を説明します。

2.1 前提条件

  • gcc/g++ コンパイラ
  • CMake 3.5 以降
  • make
  • googletest ソースコード

2.2 必要なパッケージのインストール

2.2.1 RHEL/CentOS/Rocky Linux 8

sudo dnf install -y gcc gcc-c++ cmake make

2.2.2 Ubuntu/Debian

sudo apt-get update
sudo apt-get install -y build-essential cmake

2.3 環境変数

GOOGLETEST_SOURCE="/path/to/googletest-1.17.0"

2.4 ビルド手順

2.4.1 1. Static Release

静的ライブラリを Release 設定でビルドします。

mkdir -p build-static-release
cd build-static-release
cmake -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=OFF \
  "${GOOGLETEST_SOURCE}"

make -j$(nproc)

make install DESTDIR=./installed

cd ..

成果物

  • ライブラリ: build-static-release/lib/*.a
  • インストール済み: build-static-release/installed/
    • usr/local/lib/ - ライブラリファイル
    • usr/local/lib/cmake/GTest/ - CMake 設定ファイル
    • usr/local/lib/pkgconfig/ - pkgconfig ファイル
    • usr/local/include/ - ヘッダファイル

2.4.2 2. Static Release with Debug Info

静的ライブラリを Release 設定 + デバッグ情報付きでビルドします。

mkdir -p build-static-relwithdebinfo
cd build-static-relwithdebinfo
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DBUILD_SHARED_LIBS=OFF \
  "${GOOGLETEST_SOURCE}"

make -j$(nproc)

make install DESTDIR=./installed

cd ..

成果物

  • ライブラリ: build-static-relwithdebinfo/lib/*.a (デバッグシンボル付き)
  • インストール済み: build-static-relwithdebinfo/installed/

2.4.3 3. Static Debug

静的ライブラリを Debug 設定でビルドします。

mkdir -p build-static-debug
cd build-static-debug
cmake -DCMAKE_BUILD_TYPE=Debug \
  -DBUILD_SHARED_LIBS=OFF \
  "${GOOGLETEST_SOURCE}"

make -j$(nproc)

make install DESTDIR=./installed

cd ..

成果物

  • ライブラリ: build-static-debug/lib/*.a
  • インストール済み: build-static-debug/installed/

2.5 カスタムインストール先を指定する場合

デフォルトでは /usr/local にインストールされますが、カスタムパスを指定できます。

mkdir -p build-static-release
cd build-static-release
cmake -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=OFF \
  -DCMAKE_INSTALL_PREFIX=/opt/googletest \
  "${GOOGLETEST_SOURCE}"

make -j$(nproc)
make install DESTDIR=./installed

cd ..

2.6 生成されるライブラリファイル (Linux)

静的ライブラリ (.a) として以下のファイルが生成されます。

  • libgmock.a - Google Mock ライブラリ
  • libgmock_main.a - Google Mock main 関数付き
  • libgtest.a - Google Test ライブラリ
  • libgtest_main.a - Google Test main 関数付き

2.7 CMake 設定オプションの説明 (Linux)

オプション 説明
-DCMAKE_BUILD_TYPE=Release 最適化あり、デバッグ情報なし
-DCMAKE_BUILD_TYPE=RelWithDebInfo 最適化あり、デバッグ情報あり
-DCMAKE_BUILD_TYPE=Debug 最適化なし、デバッグ情報あり
-DBUILD_SHARED_LIBS=OFF 静的ライブラリ (.a) をビルド
-DCMAKE_INSTALL_PREFIX=/path インストール先のパス

2.8 RPM パッケージ化 (RHEL/CentOS/Rocky Linux)

RPM パッケージとして配布する場合の手順例です。

mkdir -p build-rpm
cd build-rpm
cmake -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=OFF \
  -DCMAKE_INSTALL_PREFIX=/usr \
  "${GOOGLETEST_SOURCE}"

make -j$(nproc)

cpack -G RPM

cd ..

2.9 動作確認 (Linux)

ビルドしたライブラリを使用する簡単なテストプログラムで確認します。

// test_sample.cpp
#include <gtest/gtest.h>

TEST(SampleTest, BasicTest) {
    EXPECT_EQ(1, 1);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

コンパイルと実行:

g++ -std=c++14 test_sample.cpp \
  -I build-static-release/installed/usr/local/include \
  -L build-static-release/installed/usr/local/lib \
  -lgtest -lgtest_main -pthread \
  -o test_sample

./test_sample

2.10 トラブルシューティング (Linux)

2.10.1 CMake のバージョンが古い場合

wget https://github.com/Kitware/CMake/releases/download/v3.28.0/cmake-3.28.0-linux-x86_64.sh
chmod +x cmake-3.28.0-linux-x86_64.sh
sudo ./cmake-3.28.0-linux-x86_64.sh --prefix=/usr/local --skip-license

2.10.2 pthread リンクエラーが発生する場合

リンク時に -pthread オプションを追加してください。

2.10.3 ライブラリのリンク順序エラーが発生する場合

ライブラリは依存関係の逆順でリンクする必要があります。

g++ test_sample.cpp -lgtest_main -lgtest -pthread -o test_sample

g++ test_sample.cpp -lgtest -lgtest_main -pthread -o test_sample

3 Windows 環境でのビルド

MSVC で 4 つのランタイムオプション (/MT, /MD, /MTd, /MDd) でビルドする手順を説明します。

3.1 前提条件

  • Visual Studio 2022 Professional (CMake 付属)
  • googletest ソースコード

3.2 環境変数

CMAKE_EXE="C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"
GOOGLETEST_SOURCE="D:\path\to\googletest-1.17.0"

3.3 ビルド手順

3.3.1 1. /MT (Release Static with Debug Info)

mkdir -p build-MT
cd build-MT
"${CMAKE_EXE}" -G "Visual Studio 2022" -A x64 \
  -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded \
  -Dgtest_force_shared_crt=OFF \
  "${GOOGLETEST_SOURCE}"

"${CMAKE_EXE}" --build . --config RelWithDebInfo

"${CMAKE_EXE}" --install . --config RelWithDebInfo --prefix ./installed

cd ..

成果物

  • ライブラリ: build-MT/lib/RelWithDebInfo/*.lib
  • PDB ファイル: build-MT/lib/RelWithDebInfo/*.pdb
  • インストール済み: build-MT/installed/
    • lib/ - ライブラリファイル
    • lib/cmake/GTest/ - CMake 設定ファイル
    • lib/pkgconfig/ - pkgconfig ファイル
    • include/ - ヘッダファイル

3.3.2 2. /MD (Release DLL with Debug Info)

mkdir -p build-MD
cd build-MD
"${CMAKE_EXE}" -G "Visual Studio 2022" -A x64 \
  -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL \
  -Dgtest_force_shared_crt=ON \
  "${GOOGLETEST_SOURCE}"

"${CMAKE_EXE}" --build . --config RelWithDebInfo

"${CMAKE_EXE}" --install . --config RelWithDebInfo --prefix ./installed

cd ..

成果物

  • ライブラリ: build-MD/lib/RelWithDebInfo/*.lib
  • PDB ファイル: build-MD/lib/RelWithDebInfo/*.pdb
  • インストール済み: build-MD/installed/

3.3.3 3. /MTd (Debug Static)

mkdir -p build-MTd
cd build-MTd
"${CMAKE_EXE}" -G "Visual Studio 2022" -A x64 \
  -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug \
  -Dgtest_force_shared_crt=OFF \
  "${GOOGLETEST_SOURCE}"

"${CMAKE_EXE}" --build . --config Debug

"${CMAKE_EXE}" --install . --config Debug --prefix ./installed

cd ..

成果物

  • ライブラリ: build-MTd/lib/Debug/*.lib
  • PDB ファイル: build-MTd/lib/Debug/*.pdb
  • インストール済み: build-MTd/installed/

3.3.4 4. /MDd (Debug DLL)

mkdir -p build-MDd
cd build-MDd
"${CMAKE_EXE}" -G "Visual Studio 2022" -A x64 \
  -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL \
  -Dgtest_force_shared_crt=ON \
  "${GOOGLETEST_SOURCE}"

"${CMAKE_EXE}" --build . --config Debug

"${CMAKE_EXE}" --install . --config Debug --prefix ./installed

cd ..

成果物

  • ライブラリ: build-MDd/lib/Debug/*.lib
  • PDB ファイル: build-MDd/lib/Debug/*.pdb
  • インストール済み: build-MDd/installed/

3.4 クリーンアップ (オプション)

Debug ビルドで生成される不要な NOTFOUND.pdb ファイルを削除します。

rm -f build-MTd/lib/Debug/*NOTFOUND.pdb
rm -f build-MDd/lib/Debug/*NOTFOUND.pdb

3.5 生成されるライブラリファイル (Windows)

各ビルド設定で以下のライブラリが生成されます。

  • gmock.lib - Google Mock ライブラリ
  • gmock_main.lib - Google Mock main 関数付き
  • gtest.lib - Google Test ライブラリ
  • gtest_main.lib - Google Test main 関数付き

各 lib ファイルに対応する pdb ファイルも生成されます。

3.6 CMake 設定オプションの説明 (Windows)

オプション 説明
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded /MT (Release Static)
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL /MD (Release DLL)
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebug /MTd (Debug Static)
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDebugDLL /MDd (Debug DLL)
-Dgtest_force_shared_crt=OFF CRT を静的リンク
-Dgtest_force_shared_crt=ON CRT を動的リンク

3.7 ビルド構成の説明 (Windows)

構成 説明
Release 最適化あり、デバッグ情報なし
RelWithDebInfo 最適化あり、デバッグ情報あり (pdb 生成)
Debug 最適化なし、デバッグ情報あり (pdb 生成)

Release ビルドで pdb を生成する場合は、RelWithDebInfo 構成を使用します。