GoogleTest 使用指南 | 安装 GoogleTest
GoogleTest 使用指南 | 安装 GoogleTest
使用包管理器安装
Ubuntu/Debian
# 安装
sudo apt-get update
sudo apt-get install libgtest-dev cmake
# 注意:某些版本需要手动编译
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
sudo cp lib/*.a /usr/lib
# 或者安装预编译版本(Ubuntu 18.04+)
sudo apt-get install libgtest-dev libgmock-dev
macOS(Homebrew)
# 安装
brew install googletest
# 查看安装位置
brew list googletest
# 通常安装在:
# /usr/local/Cellar/googletest/版本号/ (Intel Mac)
# /opt/homebrew/Cellar/googletest/版本号/ (Apple Silicon)
Windows(vcpkg)
# 安装 vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
# 安装 GoogleTest
.\vcpkg install gtest:x64-windows
# 或包含 GMock
.\vcpkg install gtest[gmock]:x64-windows
# 集成到 CMake
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake
CentOS/RHEL/Fedora
# Fedora
sudo dnf install gtest gtest-devel gmock gmock-devel
# CentOS/RHEL (需要 EPEL)
sudo yum install epel-release
sudo yum install gtest gtest-devel
Arch Linux
sudo pacman -S gtest gmock
使用 CMake 集成
现代 CMake 项目可以通过 FetchContent 直接引入 Google Test:
# 下载并包含 GoogleTest
include(FetchContent)
FetchContent_Declare(
googletest
# 对于 GoogleTest 1.11以及后续版本,可能需要使用 GIT_REPOSITORY 和 GIT_TAG 来代替 URL
URL https://gitee.com/mirrors/googletest/repository/archive/main.zip
)
# 下载并使 GoogleTest 可用
FetchContent_MakeAvailable(googletest)
or:
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.14.0 # 指定版本
)
FetchContent_MakeAvailable(googletest)
使用镜像 URL 下载 GoogleTest 源码会快一些,你也可以使用原 URL:
https://github.com/google/googletest/archive/refs/heads/main.zip
Git Submodule 方法
添加为子模块:
# 在项目根目录
mkdir third_party
cd third_party
# 添加 googletest 作为子模块
git submodule add https://github.com/google/googletest.git
git submodule update --init --recursive
# 提交更改
git add .
git commit -m "Add googletest as submodule"
CMakeLists.txt 配置:
cmake_minimum_required(VERSION 3.14)
project(my_project)
# 添加子目录
add_subdirectory(third_party/googletest)
# 包含目录
include_directories(${gtest_SOURCE_DIR}/include)
include_directories(${gmock_SOURCE_DIR}/include)
# 添加测试
add_executable(my_tests test/test_main.cpp)
target_link_libraries(my_tests gtest_main gmock)
更新子模块:
# 更新到最新版本
cd third_party/googletest
git checkout v1.14.0
cd ../..
git add third_party/googletest
git commit -m "Update googletest to v1.14.0"
# 克隆包含子模块的项目
git clone --recurse-submodules https://github.com/user/project.git
# 或者
git clone https://github.com/user/project.git
git submodule update --init --recursive
源码编译安装
下载和编译:
# 下载源码
git clone https://github.com/google/googletest.git
cd googletest
# 创建构建目录
mkdir build && cd build
# 配置(根据需求调整选项)
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_GMOCK=ON \
-Dgtest_force_shared_crt=ON
# 编译
make -j$(nproc)
# 安装(需要管理员权限)
sudo make install
自定义安装位置:
# 安装到用户目录
cmake .. \
-DCMAKE_INSTALL_PREFIX=$HOME/.local \
-DBUILD_SHARED_LIBS=ON
make -j$(nproc)
make install
# 设置环境变量
export CMAKE_PREFIX_PATH=$HOME/.local:$CMAKE_PREFIX_PATH
export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH
在项目中使用:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(my_project)
# 查找已安装的 GoogleTest
find_package(GTest REQUIRED)
add_executable(my_tests test/test_main.cpp)
target_link_libraries(my_tests GTest::gtest_main GTest::gmock)
Conan 包管理器
安装 conan:
pip install conan
# 或
brew install conan # macOS
创建 conanfile.txt:
[requires]
gtest/1.14.0
[generators]
CMakeDeps
CMakeToolchain
[options]
gtest:build_gmock=True
gtest:shared=False
安装依赖:
# 创建构建目录
mkdir build && cd build
# 安装依赖
conan install .. --build=missing
# CMake 构建
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
cmake --build .
CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(my_project)
find_package(GTest REQUIRED)
add_executable(my_tests test/test_main.cpp)
target_link_libraries(my_tests GTest::gtest_main)
预编译二进制(Windows)
使用 NuGet
<!-- 在 Visual Studio 中 -->
<!-- packages.config -->
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="googletest" version="1.14.0" />
</packages>
Visual Studio 包管理器
# 包管理器控制台
Install-Package googletest
Docker 容器方法
创建 Dockerfile:
FROM gcc:latest
# 安装依赖
RUN apt-get update && apt-get install -y \
cmake \
git \
&& rm -rf /var/lib/apt/lists/*
# 安装 GoogleTest
RUN git clone https://github.com/google/googletest.git /googletest \
&& cd /googletest \
&& mkdir build \
&& cd build \
&& cmake .. \
&& make -j$(nproc) \
&& make install \
&& cd / \
&& rm -rf /googletest
WORKDIR /app
# 复制项目文件
COPY . .
# 构建项目
RUN mkdir build && cd build && cmake .. && make
# 运行测试
CMD ["./build/tests/run_tests"]
使用 Docker Compose:
# docker-compose.yml
version: '3'
services:
test:
build: .
volumes:
- .:/app
command: sh -c "cd /app/build && ctest --output-on-failure"
集成到不同构建系统
Make
# Makefile
CXX = g++
CXXFLAGS = -std=c++14 -Wall -g
GTEST_FLAGS = -lgtest -lgtest_main -pthread
TESTS = test_runner
TEST_SRCS = test/test_main.cpp src/calculator.cpp
$(TESTS): $(TEST_SRCS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(GTEST_FLAGS)
test: $(TESTS)
./$(TESTS)
clean:
rm -f $(TESTS)
Bazel
# WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "com_google_googletest",
urls = ["https://github.com/google/googletest/archive/v1.14.0.tar.gz"],
strip_prefix = "googletest-1.14.0",
)
# BUILD
cc_test(
name = "my_test",
size = "small",
srcs = ["test_main.cpp"],
deps = [
"@com_google_googletest//:gtest_main",
],
)
Meson
# meson.build
project('my_project', 'cpp',
version : '0.1.0',
default_options : ['cpp_std=c++14'])
gtest_dep = dependency('gtest', required : true)
gmock_dep = dependency('gmock', required : true)
test_exe = executable('my_tests',
'test/test_main.cpp',
dependencies : [gtest_dep, gmock_dep])
test('basic tests', test_exe)
验证安装
创建测试文件
// test_install.cpp
#include <gtest/gtest.h>
TEST(InstallTest, BasicAssertion) {
EXPECT_EQ(1 + 1, 2);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
编译测试
# 直接编译
g++ -std=c++14 test_install.cpp -lgtest -lgtest_main -pthread -o test_install
./test_install
# 使用 CMake
cmake -B build -S .
cmake --build build
ctest --test-dir build --output-on-failure
故障排除
| 问题 | 解决方案 |
|---|---|
| 找不到 gtest/gtest.h | 检查包含路径,添加 -I/path/to/gtest/include |
| 链接错误 | 确保链接正确的库 -lgtest -lgtest_main -pthread |
| 版本冲突 | 使用 FetchContent 或指定确切版本 |
| 下载超时 | 使用国内镜像或代理 |
| Windows 运行时错误 | 设置 gtest_force_shared_crt=ON |
总结
| 方法 | 难度 | 推荐场景 | 优缺点 |
|---|---|---|---|
| FetchContent (CMake) | ⭐ | 新项目、CMake项目 | ✅自动下载 ✅版本控制 ❌需要网络 |
| 包管理器 | ⭐ | 系统级安装 | ✅简单快速 ❌版本可能较旧 |
| Git Submodule | ⭐⭐ | 版本控制项目 | ✅版本锁定 ✅离线使用 ❌仓库变大 |
| 源码编译 | ⭐⭐⭐ | 自定义需求 | ✅完全控制 ❌较复杂 |
| 预编译二进制 | ⭐⭐ | Windows项目 | ✅无需编译 ❌平台限制 |
| Conan/vcpkg | ⭐⭐ | 大型项目 | ✅依赖管理 ❌学习成本 |
5208

被折叠的 条评论
为什么被折叠?



