Skip to content

Instantly share code, notes, and snippets.

@ryankurte
Created April 23, 2019 03:33
Show Gist options
  • Save ryankurte/1abfe9c3c8bfd74e1d46bfdbbc2fb83b to your computer and use it in GitHub Desktop.
Save ryankurte/1abfe9c3c8bfd74e1d46bfdbbc2fb83b to your computer and use it in GitHub Desktop.
Googletest vendoring and install detection for cmake
# CMake GoogleTest vendoring helper
# Adapted from https://github.com/snikulov/google-test-examples
include(ExternalProject)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTEST gtest)
set(GTEST_FORCE_SHARED_CRT ON)
set(GTEST_DISABLE_PTHREADS OFF)
if(MINGW)
set(GTEST_DISABLE_PTHREADS ON)
endif()
# If GTEST_INCLUDE_DIRS and GTEST_LIBS_DIR are not defined, vendor in google test
if ((NOT DEFINED GTEST_INCLUDE_DIRS) AND (NOT DEFINED GTEST_LIBS_DIR))
message(STATUS "no googletest install found, vendoring into project")
ExternalProject_Add(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_SHALLOW true
GIT_TAG release-1.8.1
CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
-DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
-Dgtest_force_shared_crt=${GTEST_FORCE_SHARED_CRT}
-Dgtest_disable_pthreads=${GTEST_DISABLE_PTHREADS}
-DBUILD_GTEST=ON
PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
# Disable install step
INSTALL_COMMAND ""
)
# Specify include dir
ExternalProject_Get_Property(googletest source_dir)
set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include)
# Specify MainTest's link libraries
ExternalProject_Get_Property(googletest binary_dir)
set(GTEST_LIBS_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/googletest-build/googlemock/gtest)
# Use this to gate adding a dependency to the test project (only required when vending)
set(GTEST_VENDORED "")
endif ()
# Include GTest stuff
message(STATUS "Using googletest from:")
message(STATUS " GTEST_INCLUDE_DIRS=${GTEST_INCLUDE_DIRS}")
message(STATUS " GTEST_LIBS_DIR=${GTEST_LIBS_DIR}")
include_directories(${GTEST_INCLUDE_DIRS})
link_directories(${GTEST_LIBS_DIR})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment