Function ( __gtest_define_backwards_compatible_library_targets ) Set ( GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE ) # Add targets mapping the same library names as defined in # older versions of CMake's FindGTest If ( NOT TARGET GTest::GTest ) Add_Library ( GTest::GTest INTERFACE IMPORTED ) Target_Link_Libraries ( GTest::GTest INTERFACE GTest::gtest ) EndIf () If ( NOT TARGET GTest::Main ) Add_Library ( GTest::Main INTERFACE IMPORTED ) Target_Link_Libraries ( GTest::Main INTERFACE GTest::gtest_main ) EndIf () If ( NOT TARGET GMock::GMock ) Add_Library ( GMock::GMock INTERFACE IMPORTED ) Target_Link_Libraries ( GMock::GMock INTERFACE GMock::gmock ) EndIf () If ( NOT TARGET GMock::Main ) Add_Library ( GMock::Main INTERFACE IMPORTED ) Target_Link_Libraries ( GMock::Main INTERFACE GMock::gmock_main ) EndIf () EndFunction() Include ( ExternalProject ) Include ( FindPackageHandleStandardArgs ) If( CMAKE_CROSSCOMPILING ) Message ( STATUS "Disable search for 'GTest' package because of cross compiling. Skip unit test targets..." ) Return ( ) EndIf ( ) If( GTest_FOUND ) Return () EndIf ( ) # Configure external project Set ( GTEST_EX_PATH "${CMAKE_BINARY_DIR}/subprojects/googletest" ) Get_Property ( IS_INCLUDED GLOBAL PROPERTY __external_project_googletest ) If ( NOT IS_INCLUDED ) ExternalProject_Add ( project_googletest URL "https://github.com/google/googletest/archive/refs/tags/release-1.10.0.tar.gz" URL_HASH SHA256=9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb PREFIX ${GTEST_EX_PATH} INSTALL_COMMAND make install DESTDIR=${GTEST_EX_PATH} ) Set_Property ( GLOBAL PROPERTY __external_project_googletest TRUE ) EndIf ( ) Set ( GTEST_INCLUDE_DIR "${GTEST_EX_PATH}/usr/local/include" ) Set ( GTEST_LIBRARY "${GTEST_EX_PATH}/usr/local/lib/libgtest.a" ) Set ( GTEST_MAIN_LIBRARY "${GTEST_EX_PATH}/usr/local/lib/libgtest_main.a" ) Set ( GMOCK_LIBRARY "${GTEST_EX_PATH}/usr/local/lib/libgmock.a" ) Set ( GMOCK_MAIN_LIBRARY "${GTEST_EX_PATH}/usr/local/lib/libgmock_main.a" ) File ( MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ) # Find package Find_Package_Handle_Standard_Args ( GTest DEFAULT_MSG GTEST_INCLUDE_DIR GTEST_LIBRARY GTEST_MAIN_LIBRARY GMOCK_LIBRARY GMOCK_MAIN_LIBRARY ) If ( GTest_FOUND ) Set ( GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR} ) Find_Package ( Threads QUIET ) If ( NOT TARGET GTest::gtest ) Add_Library ( GTest::gtest STATIC IMPORTED ) Add_Dependencies ( GTest::gtest project_googletest ) If ( TARGET Threads::Threads ) Set_Target_Properties ( GTest::gtest PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads ) EndIf () Set_Target_Properties ( GTest::gtest PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}" IMPORTED_LOCATION "${GTEST_LIBRARY}" ) EndIf () If ( NOT TARGET GTest::gtest_main ) Add_Library ( GTest::gtest_main STATIC IMPORTED ) Set_Target_Properties ( GTest::gtest_main PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "GTest::gtest" IMPORTED_LOCATION "${GTEST_MAIN_LIBRARY}" ) EndIf() If ( NOT TARGET GMock::gmock ) Add_Library ( GMock::gmock STATIC IMPORTED ) If ( TARGET Threads::Threads ) Set_Target_Properties ( GMock::gmock PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads ) EndIf () Set_Target_Properties ( GMock::gmock PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "GTest::gtest" IMPORTED_LOCATION "${GMOCK_LIBRARY}" ) EndIf () If ( NOT TARGET GMock::gmock_main ) Add_Library ( GMock::gmock_main STATIC IMPORTED ) Set_Target_Properties ( GMock::gmock_main PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}" INTERFACE_LINK_LIBRARIES "GMock::gmock" IMPORTED_LOCATION "${GMOCK_MAIN_LIBRARY}" ) EndIf() __gtest_define_backwards_compatible_library_targets () EndIf ()