FindGTest

Locate the Google C++ Testing Framework.

Imported targets

This module defines the following IMPORTED targets:

GTest::GTest

The Google Test gtest library, if found; adds Thread::Thread automatically

GTest::Main

The Google Test gtest_main library, if found

Result variables

This module will set the following variables in your project:

GTEST_FOUND

Found the Google Testing framework

GTEST_INCLUDE_DIRS

the directory containing the Google Test headers

The library variables below are set as normal variables. These contain debug/optimized keywords when a debugging library is found.

GTEST_LIBRARIES

The Google Test gtest library; note it also requires linking with an appropriate thread library

GTEST_MAIN_LIBRARIES

The Google Test gtest_main library

GTEST_BOTH_LIBRARIES

Both gtest and gtest_main

Cache variables

The following cache variables may also be set:

GTEST_ROOT

The root directory of the Google Test installation (may also be set as an environment variable)

GTEST_MSVC_SEARCH

If compiling with MSVC, this variable can be set to MD or MT (the default) to enable searching a GTest build tree

Example usage

enable_testing()
find_package(GTest REQUIRED)

add_executable(foo foo.cc)
target_link_libraries(foo GTest::GTest GTest::Main)

add_test(AllTestsInFoo foo)

Deeper integration with CTest

If you would like each Google test to show up in CTest as a test you may use the following macro:

GTEST_ADD_TESTS(executable extra_args files...)
executable

the path to the test executable

extra_args

a list of extra arguments to be passed to executable enclosed in quotes (or "" for none)

files...

a list of source files to search for tests and test fixtures. Or AUTO to find them from executable target

However, note that this macro will slow down your tests by running an executable for each test and test fixture. You will also have to re-run CMake after adding or removing tests or test fixtures.

Example usage:

set(FooTestArgs --foo 1 --bar 2)
add_executable(FooTest FooUnitTest.cc)
GTEST_ADD_TESTS(FooTest "${FooTestArgs}" AUTO)