![zhangyi1357](/assets/img/avatar_default.png)
* build: refactor CMake scripts to use functions for variable scope Wrap multiple CMake scripts in functions to restrict variable scope and prevent unintended resets. This ensures better modularity and maintainability in the build process while adhering to modern CMake best practices. * refactor: simplify opentelemetry fetch logic Streamline the handling of OpenTelemetry dependencies by removing unnecessary function wrappers and directly implementing the fetching logic. This improves readability and maintainability while ensuring that relevant variables are correctly set within the proper scope. * refactor: encapsulate OpenTelemetry configuration in a function Wrap the OpenTelemetry setup in a function to limit variable scope, improving code organization and maintainability.
69 lines
2.2 KiB
CMake
69 lines
2.2 KiB
CMake
# Copyright (c) 2023, AgiBot Inc.
|
|
# All rights reserved.
|
|
|
|
include(FetchContent)
|
|
|
|
message(STATUS "get googletest ...")
|
|
|
|
set(googletest_DOWNLOAD_URL
|
|
"https://github.com/google/googletest/archive/v1.13.0.tar.gz"
|
|
CACHE STRING "")
|
|
|
|
if(googletest_LOCAL_SOURCE)
|
|
FetchContent_Declare(
|
|
googletest
|
|
SOURCE_DIR ${googletest_LOCAL_SOURCE}
|
|
OVERRIDE_FIND_PACKAGE)
|
|
else()
|
|
FetchContent_Declare(
|
|
googletest
|
|
URL ${googletest_DOWNLOAD_URL}
|
|
DOWNLOAD_EXTRACT_TIMESTAMP TRUE
|
|
OVERRIDE_FIND_PACKAGE)
|
|
endif()
|
|
|
|
# Wrap it in a function to restrict the scope of the variables
|
|
function(get_googletest)
|
|
FetchContent_GetProperties(googletest)
|
|
if(NOT googletest_POPULATED)
|
|
if(WIN32)
|
|
set(gtest_force_shared_crt ON)
|
|
endif()
|
|
set(INSTALL_GTEST OFF)
|
|
|
|
FetchContent_MakeAvailable(googletest)
|
|
endif()
|
|
endfunction()
|
|
|
|
get_googletest()
|
|
|
|
# import targets:
|
|
# GTest::gtest
|
|
# GTest::gtest_main
|
|
# GTest::gmock
|
|
# GTest::gmock_main
|
|
|
|
# add xxxlib_test target for xxxlib
|
|
function(add_gtest_target)
|
|
cmake_parse_arguments(ARG "" "TEST_TARGET" "TEST_SRC;INC_DIR" ${ARGN})
|
|
set(TEST_TARGET_NAME ${ARG_TEST_TARGET}_test)
|
|
|
|
get_target_property(TEST_TARGET_TYPE ${ARG_TEST_TARGET} TYPE)
|
|
if(${TEST_TARGET_TYPE} STREQUAL SHARED_LIBRARY)
|
|
get_target_property(TEST_TARGET_SOURCES ${ARG_TEST_TARGET} SOURCES)
|
|
add_executable(${TEST_TARGET_NAME} ${ARG_TEST_SRC} ${TEST_TARGET_SOURCES})
|
|
|
|
get_target_property(TEST_TARGET_INCLUDE_DIRECTORIES ${ARG_TEST_TARGET} INCLUDE_DIRECTORIES)
|
|
target_include_directories(${TEST_TARGET_NAME} PRIVATE ${ARG_INC_DIR} ${TEST_TARGET_INCLUDE_DIRECTORIES})
|
|
|
|
get_target_property(TEST_TARGET_LINK_LIBRARIES ${ARG_TEST_TARGET} LINK_LIBRARIES)
|
|
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ${TEST_TARGET_LINK_LIBRARIES} GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)
|
|
else()
|
|
add_executable(${TEST_TARGET_NAME} ${ARG_TEST_SRC})
|
|
target_include_directories(${TEST_TARGET_NAME} PRIVATE ${ARG_INC_DIR})
|
|
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ${ARG_TEST_TARGET} GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main)
|
|
endif()
|
|
|
|
add_test(NAME ${TEST_TARGET_NAME} COMMAND $<TARGET_FILE:${TEST_TARGET_NAME}>)
|
|
endfunction()
|