FindGTest

查找 GoogleTest,Google C++ 测试和模拟框架

find_package(GTest [...])

GoogleTest 框架还包括 GoogleMock,一个用于编写和使用 C++ 模拟类的库。在某些系统上,GoogleMock 可能作为单独的包分发。

当 GoogleTest 和 GoogleMock 库的调试和发布(优化)版本都可用时,此模块会根据当前的构建配置选择适当的版本。

版本 3.20 新增:如果 GoogleTest 使用其基于 CMake 的构建系统构建并安装,它会提供一个包配置文件GTestConfig.cmake),可以在配置模式下与find_package()一起使用。默认情况下,此模块现在搜索该配置文件,如果找到,则直接返回结果而无需进一步操作。如果未找到上游配置文件,则此模块会回退到模块模式并搜索标准位置。

导入的目标

此模块提供以下 导入目标

GTest::gtest

在 3.20 版本中添加。

如果找到 GoogleTest,则此目标封装了 GoogleTest gtest 库的使用要求。gtest 库提供了核心的 GoogleTest 测试框架功能。

GTest::gtest_main

在 3.20 版本中添加。

如果找到 GoogleTest,则此目标封装了 GoogleTest gtest_main 库的使用要求。gtest_main 库提供了 main() 函数,允许运行测试而无需手动定义。

仅当 GoogleTest 应为可执行文件提供 main() 函数时,才链接到 GTest::gtest_main。如果项目提供自己的 main() 实现,则仅链接到 GTest::gtest

GTest::gmock

在版本 3.23 中添加。

如果找到 GoogleTest 及其 Mock 库,则此目标封装了 GoogleMock gmock 库的使用要求。gmock 库提供了在 C++ 中编写和使用模拟类的功能。

GTest::gmock_main

在版本 3.23 中添加。

如果找到 GoogleTest 和 gmock_main,则此目标封装了 GoogleMock gmock_main 库的使用要求。gmock_main 库提供了 main() 函数,允许运行 GoogleMock 测试而无需手动定义。

仅当 GoogleTest 应为可执行文件提供 main() 函数时,才链接到 GTest::gmock_main。如果项目提供自己的 main() 实现,则仅链接到 GTest::gmock

结果变量

此模块定义了以下变量

GTest_FOUND

布尔值,指示是否找到 GoogleTest。

提示

此模块在调用 find_package(GTest) 之前接受以下变量

GTEST_ROOT

GoogleTest 安装的根目录(也可以设置为环境变量)。此变量仅当在模块模式下找到 GoogleTest 时使用。

GTEST_MSVC_SEARCH

使用 MSVC 编译时,此变量控制根据运行时库链接模型要搜索的 GoogleTest 构建变体。此变量仅当在模块模式下找到 GoogleTest 时使用,并接受以下值之一

MD

(默认)搜索 GoogleTest 的共享库变体,这些变体被构建为链接到动态 C 运行时。这些库通常使用 MSVC 运行时标志 /MD/MDd(分别用于 Release 或 Debug)进行编译。

MT

搜索 GoogleTest 的静态库变体,这些变体被构建为链接到静态 C 运行时。这些库通常使用 MSVC 运行时标志 /MT/MTd 进行编译。

已弃用的项

已弃用变量

以下变量提供用于向后兼容性

GTEST_INCLUDE_DIRS

自版本 4.1 起已弃用:请改用 GTest::gtest 导入目标,该目标通过其INTERFACE_INCLUDE_DIRECTORIES 目标属性公开所需的包含目录。

结果变量,提供包含使用 GoogleTest 所需头文件的包含目录。此变量仅在模块模式下找到 GoogleTest 时才保证可用。

GTEST_LIBRARIES

自版本 4.1 起已弃用:请改用 GTest::gtest 导入目标。

结果变量,提供链接到使用 GoogleTest gtest 库所需的库。请注意,项目除了此变量指定的库外,还需要链接适当的线程库。

GTEST_MAIN_LIBRARIES

自版本 4.1 起已弃用:请改用 GTest::gtest_main 导入目标。

结果变量,提供链接到使用 GoogleTest gtest_main 库所需的库。

GTEST_BOTH_LIBRARIES

自版本 4.1 起已弃用:请改用 GTest::gtestGTest::gtest_main 导入目标。

结果变量,同时提供 gtestgtest_main 库的组合。

已弃用的导入目标

为了向后兼容,此模块还提供以下导入目标(自 CMake 3.5 起可用)

GTest::GTest

自版本 3.20 起已弃用:请改用 GTest::gtest 导入目标。

链接 GTest::gtest 库的导入目标。

GTest::Main

自版本 3.20 起已弃用:请改用 GTest::gtest_main 导入目标。

链接 GTest::gtest_main 库的导入目标。

示例

示例:查找 GoogleTest

查找 GoogleTest

find_package(GoogleTest)

或者,查找 GoogleTest 并使其成为必需(如果未找到,则处理将停止并显示错误消息)

find_package(GoogleTest REQUIRED)

示例:使用导入目标

在以下示例中,GTest::gtest 导入目标链接到项目目标,从而可以使用核心 GoogleTest 测试框架

find_package(GTest REQUIRED)

target_link_libraries(foo PRIVATE GTest::gtest)

在下一个示例中,GTest::gtest_main 导入目标也链接到可执行文件,并注册了一个测试。GTest::gtest_main 库提供了 main() 函数,因此无需手动编写。GTest::gtest 库仍然被链接,因为测试代码直接使用了 GTest::gtest 提供的功能,并且直接链接到直接使用的库是一个好习惯。

enable_testing()

find_package(GTest REQUIRED)

add_executable(foo foo.cc)
target_link_libraries(foo PRIVATE GTest::gtest GTest::gtest_main)

add_test(NAME AllTestsInFoo COMMAND foo)

与 CTest 的深度集成

此模块通常与GoogleTest 模块一起使用,该模块提供了gtest_discover_tests()gtest_add_tests() 命令,以帮助将 GoogleTest 基础设施与 CTest 集成

find_package(GTest)
target_link_libraries(example PRIVATE GTest::gtest GTest::gtest_main)

include(GoogleTest)
gtest_discover_tests(example)

# ...

版本 3.9 中的变化:以前的 CMake 版本在此模块中定义了gtest_add_tests() 命令。