From e40e4aff3092970cf4436f8cc9c6371b3427b636 Mon Sep 17 00:00:00 2001 From: Stevenchou1898 Date: Sat, 8 Mar 2025 02:29:40 -0800 Subject: [PATCH] Update CMakeLists.txt Solve the problem that the build is interrupted when the local development directory is not a git repository, and other reasons cause the environment exception and cannot obtain git related information. --- .../core/src/main/cpp/CMakeLists.txt | 66 +++++++++++-------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt b/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt index ff188eb..cbf86e4 100644 --- a/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt +++ b/Android-kotlin-Code/core/src/main/cpp/CMakeLists.txt @@ -1,48 +1,58 @@ cmake_minimum_required(VERSION 3.0) # 获取git hash - message(STATUS "CMAKE_CURRENT_SOURCE_DIR= ${CMAKE_CURRENT_SOURCE_DIR}") execute_process( COMMAND git submodule foreach git log -1 --format=%H WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE COMMIT_HASH ) -string(REPLACE "\n" ";" COMMIT_HASH "${COMMIT_HASH}") -list(GET COMMIT_HASH 1 COMMIT_HASH) -string (REGEX REPLACE "[\n\t\r]" "" COMMIT_HASH ${COMMIT_HASH}) -string(SUBSTRING ${COMMIT_HASH} 0 7 COMMIT_HASH) -message(STATUS "git hash= ${COMMIT_HASH}") -# 获取分支名称 -execute_process( - COMMAND git submodule foreach git branch -r --contains ${COMMIT_HASH} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - OUTPUT_VARIABLE CURRENT_BRANCH -) -string(REPLACE "\n" ";" CURRENT_BRANCH "${CURRENT_BRANCH}") -list(GET CURRENT_BRANCH 1 CURRENT_BRANCH) -string (REGEX REPLACE "origin/" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") -string (REGEX REPLACE "[\n\t\r]" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") -#string(SUBSTRING ${CURRENT_BRANCH} 0 8 CURRENT_BRANCH) -message(STATUS "git current branch = ${CURRENT_BRANCH}") +# 判断是否获取到了git hash值(规避如因项目目录非git repository等原因产生的获取异常而中断build) +string(LENGTH ${COMMIT_HASH} OUTPUT_VARIABLE COMMIT_HASH_LENGTH) +string(COMPARE LESS ${COMMIT_HASH_LENGTH} "40" OUTPUT_VARIABLE GIT_HASH_COMPARISON_RESULT) +if(NOT ${GIT_HASH_COMPARISON_RESULT}) + string(REPLACE "\n" ";" COMMIT_HASH "${COMMIT_HASH}") + list(GET COMMIT_HASH 1 COMMIT_HASH) + string (REGEX REPLACE "[\n\t\r]" "" COMMIT_HASH ${COMMIT_HASH}) + #string(SUBSTRING ${COMMIT_HASH} 0 7 COMMIT_HASH) + message(STATUS "git hash= ${COMMIT_HASH}") -# 获取生成时间 -string(TIMESTAMP COMPILE_TIME "%y%m%d") -string (REGEX REPLACE "[\n\t\r]" "" COMPILE_TIME ${COMPILE_TIME}) -string(REGEX REPLACE "\"" "" COMPILE_TIME ${COMPILE_TIME}) + # 获取git分支名称 + execute_process( + COMMAND git submodule foreach git branch -r --contains ${COMMIT_HASH} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE CURRENT_BRANCH + ) -# 生成版本信息 -set(GIT_VERSION "${CURRENT_BRANCH}_${COMMIT_HASH}_${COMPILE_TIME}") -message(STATUS "version info = ${GIT_VERSION}") + string(REPLACE "\n" ";" CURRENT_BRANCH "${CURRENT_BRANCH}") + list(GET CURRENT_BRANCH 1 CURRENT_BRANCH) + string (REGEX REPLACE "origin/" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") + string (REGEX REPLACE "[\n\t\r]" "" CURRENT_BRANCH ${CURRENT_BRANCH} "") + string(SUBSTRING ${CURRENT_BRANCH} 0 8 CURRENT_BRANCH) + message(STATUS "git current branch = ${CURRENT_BRANCH}") -# 去除空格 -string(REGEX REPLACE "[ ]+" "" GIT_VERSION "${GIT_VERSION}") + # 获取生成时间 + string(TIMESTAMP COMPILE_TIME "%y%m%d") + string (REGEX REPLACE "[\n\t\r]" "" COMPILE_TIME ${COMPILE_TIME}) + string(REGEX REPLACE "\"" "" COMPILE_TIME ${COMPILE_TIME}) + + # 生成版本信息 + set(GIT_VERSION "${CURRENT_BRANCH}_${COMMIT_HASH}_${COMPILE_TIME}") + message(STATUS "version info = ${GIT_VERSION}") + + # 去除空格 + string(REGEX REPLACE "[ ]+" "" GIT_VERSION "${GIT_VERSION}") +else() + message(AUTHOR_WARNING "Unable to get git hash, but build will continue.") + +endif() # 保存变量到文件 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/version.h @ONLY) -project(clash-bridge C) +#设置项目名称与语言类别(必) +project(MY_UUVPN C) set(CMAKE_POSITION_INDEPENDENT_CODE on)