このドキュメントでは、GoogleTest を Linux および Windows 環境で手動ビルドする手順を説明します。
通常は GitHub Actions が自動的にビルドしますが、カスタムビルドが必要な場合はこの手順を参照してください。
source: google/googletest
Linux:
- RelWithDebInfo (最適化あり、デバッグ情報あり)
Windows:
- /MD (MultiThreadedDLL, RelWithDebInfo)
- /MDd (MultiThreadedDebugDLL, Debug)
- /MT (MultiThreaded, RelWithDebInfo)
- /MTd (MultiThreadedDebug, Debug)
Linux 環境で gcc/g++ を使用して静的ライブラリ (.a) をビルドする手順を説明します。
sudo dnf install -y gcc gcc-c++ cmake makesudo apt-get update
sudo apt-get install -y build-essential cmakeGOOGLETEST_SOURCE="/path/to/googletest-1.17.0"静的ライブラリを 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/*.abuild-static-release/installed/
usr/local/lib/ - ライブラリファイルusr/local/lib/cmake/GTest/ - CMake 設定ファイルusr/local/lib/pkgconfig/ - pkgconfig ファイルusr/local/include/ - ヘッダファイル静的ライブラリを 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/静的ライブラリを 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/*.abuild-static-debug/installed/デフォルトでは /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 ..静的ライブラリ (.a) として以下のファイルが生成されます。
libgmock.a - Google Mock ライブラリlibgmock_main.a - Google Mock main 関数付きlibgtest.a - Google Test ライブラリlibgtest_main.a - Google Test main 関数付き| オプション | 説明 |
|---|---|
-DCMAKE_BUILD_TYPE=Release |
最適化あり、デバッグ情報なし |
-DCMAKE_BUILD_TYPE=RelWithDebInfo |
最適化あり、デバッグ情報あり |
-DCMAKE_BUILD_TYPE=Debug |
最適化なし、デバッグ情報あり |
-DBUILD_SHARED_LIBS=OFF |
静的ライブラリ (.a) をビルド |
-DCMAKE_INSTALL_PREFIX=/path |
インストール先のパス |
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 ..ビルドしたライブラリを使用する簡単なテストプログラムで確認します。
// 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_samplewget 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リンク時に -pthread オプションを追加してください。
ライブラリは依存関係の逆順でリンクする必要があります。
g++ test_sample.cpp -lgtest_main -lgtest -pthread -o test_sample
g++ test_sample.cpp -lgtest -lgtest_main -pthread -o test_sampleMSVC で 4 つのランタイムオプション (/MT, /MD, /MTd, /MDd) でビルドする手順を説明します。
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"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/*.libbuild-MT/lib/RelWithDebInfo/*.pdbbuild-MT/installed/
lib/ - ライブラリファイルlib/cmake/GTest/ - CMake 設定ファイルlib/pkgconfig/ - pkgconfig ファイルinclude/ - ヘッダファイル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/*.libbuild-MD/lib/RelWithDebInfo/*.pdbbuild-MD/installed/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/*.libbuild-MTd/lib/Debug/*.pdbbuild-MTd/installed/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/*.libbuild-MDd/lib/Debug/*.pdbbuild-MDd/installed/Debug ビルドで生成される不要な NOTFOUND.pdb ファイルを削除します。
rm -f build-MTd/lib/Debug/*NOTFOUND.pdb
rm -f build-MDd/lib/Debug/*NOTFOUND.pdb各ビルド設定で以下のライブラリが生成されます。
gmock.lib - Google Mock ライブラリgmock_main.lib - Google Mock main 関数付きgtest.lib - Google Test ライブラリgtest_main.lib - Google Test main 関数付き各 lib ファイルに対応する pdb ファイルも生成されます。
| オプション | 説明 |
|---|---|
-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 を動的リンク |
| 構成 | 説明 |
|---|---|
Release |
最適化あり、デバッグ情報なし |
RelWithDebInfo |
最適化あり、デバッグ情報あり (pdb 生成) |
Debug |
最適化なし、デバッグ情報あり (pdb 生成) |
Release ビルドで pdb を生成する場合は、RelWithDebInfo 構成を使用します。