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
,则此目标封装了 GoogleMockgmock_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::gtest
和GTest::gtest_main
导入目标。结果变量,同时提供
gtest
和gtest_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()
命令。