Kaynağa Gözat

* Added FindGTest with GMock targets

* GTest will be downloaded as external project if needed
master
Klaus Nöske 4 yıl önce
ebeveyn
işleme
c98c3438d6
1 değiştirilmiş dosya ile 117 ekleme ve 0 silme
  1. +117
    -0
      cmake/FindGTest.cmake

+ 117
- 0
cmake/FindGTest.cmake Dosyayı Görüntüle

@@ -0,0 +1,117 @@
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 )
Message ( FATAL_ERROR "GTest already found! Do not expect that an other CMake script looked for 'GTest'. " )
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 ()

Yükleniyor…
İptal
Kaydet