|
|
- # Quickstart: Building with CMake
-
- This tutorial aims to get you up and running with GoogleTest using CMake. If
- you're using GoogleTest for the first time or need a refresher, we recommend
- this tutorial as a starting point. If your project uses Bazel, see the
- [Quickstart for Bazel](quickstart-bazel.md) instead.
-
- ## Prerequisites
-
- To complete this tutorial, you'll need:
-
- * A compatible operating system (e.g. Linux, macOS, Windows).
- * A compatible C++ compiler that supports at least C++11.
- * [CMake](https://cmake.org/) and a compatible build tool for building the
- project.
- * Compatible build tools include
- [Make](https://www.gnu.org/software/make/),
- [Ninja](https://ninja-build.org/), and others - see
- [CMake Generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
- for more information.
-
- See [Supported Platforms](platforms.md) for more information about platforms
- compatible with GoogleTest.
-
- If you don't already have CMake installed, see the
- [CMake installation guide](https://cmake.org/install).
-
- {: .callout .note}
- Note: The terminal commands in this tutorial show a Unix shell prompt, but the
- commands work on the Windows command line as well.
-
- ## Set up a project
-
- CMake uses a file named `CMakeLists.txt` to configure the build system for a
- project. You'll use this file to set up your project and declare a dependency on
- GoogleTest.
-
- First, create a directory for your project:
-
- ```
- $ mkdir my_project && cd my_project
- ```
-
- Next, you'll create the `CMakeLists.txt` file and declare a dependency on
- GoogleTest. There are many ways to express dependencies in the CMake ecosystem;
- in this quickstart, you'll use the
- [`FetchContent` CMake module](https://cmake.org/cmake/help/latest/module/FetchContent.html).
- To do this, in your project directory (`my_project`), create a file named
- `CMakeLists.txt` with the following contents:
-
- ```cmake
- cmake_minimum_required(VERSION 3.14)
- project(my_project)
-
- # GoogleTest requires at least C++11
- set(CMAKE_CXX_STANDARD 11)
-
- include(FetchContent)
- FetchContent_Declare(
- googletest
- URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip
- )
- # For Windows: Prevent overriding the parent project's compiler/linker settings
- set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
- FetchContent_MakeAvailable(googletest)
- ```
-
- The above configuration declares a dependency on GoogleTest which is downloaded
- from GitHub. In the above example, `609281088cfefc76f9d0ce82e1ff6c30cc3591e5` is
- the Git commit hash of the GoogleTest version to use; we recommend updating the
- hash often to point to the latest version.
-
- For more information about how to create `CMakeLists.txt` files, see the
- [CMake Tutorial](https://cmake.org/cmake/help/latest/guide/tutorial/index.html).
-
- ## Create and run a binary
-
- With GoogleTest declared as a dependency, you can use GoogleTest code within
- your own project.
-
- As an example, create a file named `hello_test.cc` in your `my_project`
- directory with the following contents:
-
- ```cpp
- #include <gtest/gtest.h>
-
- // Demonstrate some basic assertions.
- TEST(HelloTest, BasicAssertions) {
- // Expect two strings not to be equal.
- EXPECT_STRNE("hello", "world");
- // Expect equality.
- EXPECT_EQ(7 * 6, 42);
- }
- ```
-
- GoogleTest provides [assertions](primer.md#assertions) that you use to test the
- behavior of your code. The above sample includes the main GoogleTest header file
- and demonstrates some basic assertions.
-
- To build the code, add the following to the end of your `CMakeLists.txt` file:
-
- ```cmake
- enable_testing()
-
- add_executable(
- hello_test
- hello_test.cc
- )
- target_link_libraries(
- hello_test
- gtest_main
- )
-
- include(GoogleTest)
- gtest_discover_tests(hello_test)
- ```
-
- The above configuration enables testing in CMake, declares the C++ test binary
- you want to build (`hello_test`), and links it to GoogleTest (`gtest_main`). The
- last two lines enable CMake's test runner to discover the tests included in the
- binary, using the
- [`GoogleTest` CMake module](https://cmake.org/cmake/help/git-stage/module/GoogleTest.html).
-
- Now you can build and run your test:
-
- <pre>
- <strong>my_project$ cmake -S . -B build</strong>
- -- The C compiler identification is GNU 10.2.1
- -- The CXX compiler identification is GNU 10.2.1
- ...
- -- Build files have been written to: .../my_project/build
-
- <strong>my_project$ cmake --build build</strong>
- Scanning dependencies of target gtest
- ...
- [100%] Built target gmock_main
-
- <strong>my_project$ cd build && ctest</strong>
- Test project .../my_project/build
- Start 1: HelloTest.BasicAssertions
- 1/1 Test #1: HelloTest.BasicAssertions ........ Passed 0.00 sec
-
- 100% tests passed, 0 tests failed out of 1
-
- Total Test time (real) = 0.01 sec
- </pre>
-
- Congratulations! You've successfully built and run a test binary using
- GoogleTest.
-
- ## Next steps
-
- * [Check out the Primer](primer.md) to start learning how to write simple
- tests.
- * [See the code samples](samples.md) for more examples showing how to use a
- variety of GoogleTest features.
|