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