• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Downloads and unpacks googletest at configure time.  Based on the instructions
2# at https://github.com/google/googletest/tree/master/googletest#incorporating-into-an-existing-cmake-project
3
4# Download the latest googletest from Github master
5configure_file(
6  ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in
7  ${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt
8)
9
10set(ABSL_SAVE_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
11set(ABSL_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
12if (BUILD_SHARED_LIBS)
13  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
14  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTEST_CREATE_SHARED_LIBRARY=1")
15endif()
16
17# Configure and build the downloaded googletest source
18execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
19  RESULT_VARIABLE result
20  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
21if(result)
22  message(FATAL_ERROR "CMake step for googletest failed: ${result}")
23endif()
24
25execute_process(COMMAND ${CMAKE_COMMAND} --build .
26  RESULT_VARIABLE result
27  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
28if(result)
29  message(FATAL_ERROR "Build step for googletest failed: ${result}")
30endif()
31
32set(CMAKE_CXX_FLAGS ${ABSL_SAVE_CMAKE_CXX_FLAGS})
33set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ABSL_SAVE_CMAKE_RUNTIME_OUTPUT_DIRECTORY})
34
35# Prevent overriding the parent project's compiler/linker settings on Windows
36set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
37
38# Add googletest directly to our build. This defines the gtest and gtest_main
39# targets.
40add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
41                 ${CMAKE_BINARY_DIR}/googletest-build
42                 EXCLUDE_FROM_ALL)
43