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⭐⭐大型项目✅依赖管理 ❌学习成本
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值