From 7adf9084e98947eb8d94fb59647d25a7a095300e Mon Sep 17 00:00:00 2001 From: Lizongdi <1210855344@qq.com> Date: Tue, 9 Jun 2026 15:15:31 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=BE=85=E5=90=88=E3=80=91=E7=AE=80?= =?UTF-8?q?=E5=8C=96main=E4=B8=8B=E7=9A=84=E6=9E=84=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/CMakeLists.txt | 73 ++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 38 deletions(-) diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index f1139cf..137de78 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -4,65 +4,62 @@ get_filename_component(TARGET_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME) option(A_BUILD_MAIN_AS_STATIC_LIB "Build as a static library instead of an executable" OFF) -set(MAIN_SRCS - main.c -) - -if(A_BUILD_MAIN_AS_STATIC_LIB) - add_library(${TARGET_NAME} STATIC ${MAIN_SRCS}) -else() - add_executable(${TARGET_NAME} ${MAIN_SRCS}) -endif() - -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - target_compile_definitions(${TARGET_NAME} PRIVATE DEBUG) -endif() - +# ─── 创建目标 ──────────────────────────────────────────────────────── if(A_BUILD_MAIN_AS_STATIC_LIB) + add_library(${TARGET_NAME} STATIC main.c) set_target_properties(${TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output ) else() + add_executable(${TARGET_NAME} main.c) set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output ) endif() +# ─── 编译宏定义 ───────────────────────────────────────────────────── +target_compile_definitions(${TARGET_NAME} PRIVATE + $<$:DEBUG> + ${GLOBAL_ENABLED_MACROS} +) + +# ─── Include 目录 ──────────────────────────────────────────────────── target_include_directories(${TARGET_NAME} - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) +# ─── 链接模块 ──────────────────────────────────────────────────────── +if(GLOBAL_ENABLED_MODULES) + message(STATUS "[Main] Linking modules: ${GLOBAL_ENABLED_MODULES}") + target_link_libraries(${TARGET_NAME} PUBLIC ${GLOBAL_ENABLED_MODULES}) +else() + message(STATUS "[Main] No additional modules linked.") +endif() + +# ─── 平台链接依赖 ─────────────────────────────────────────────────── string(TOLOWER "${CMAKE_SYSTEM_NAME}" SYSTEM_NAME_LOWER) if(CMAKE_CROSSCOMPILING AND NOT SYSTEM_NAME_LOWER MATCHES "linux|windows|darwin|android") - message(STATUS ">>> 检测到裸机/RTOS 环境 (${CMAKE_SYSTEM_NAME}),屏蔽 pthread。") + message(STATUS ">>> 裸机/RTOS 环境 (${CMAKE_SYSTEM_NAME}),屏蔽 pthread") else() find_package(Threads REQUIRED) - target_link_libraries(${CURRENT_TARGET_NAME} - PUBLIC Threads::Threads + target_link_libraries(${TARGET_NAME} + PUBLIC Threads::Threads PRIVATE ${CMAKE_DL_LIBS} ) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - target_link_libraries(${CURRENT_TARGET_NAME} PRIVATE rt) + target_link_libraries(${TARGET_NAME} PRIVATE rt) endif() endif() -if(DEFINED GLOBAL_ENABLED_MODULES AND NOT GLOBAL_ENABLED_MODULES STREQUAL "") - message(STATUS "[Main] Linking modules: ${GLOBAL_ENABLED_MODULES}") - target_link_libraries(${TARGET_NAME} PUBLIC ${GLOBAL_ENABLED_MODULES}) -else() - message(STATUS "[Main] No additional modules linked.") -endif() - -if(DEFINED GLOBAL_ENABLED_MACROS AND NOT GLOBAL_ENABLED_MACROS STREQUAL "") - message(STATUS "[Main] Defining macros: ${GLOBAL_ENABLED_MACROS}") - target_compile_definitions(${TARGET_NAME} PUBLIC ${GLOBAL_ENABLED_MACROS}) -endif() +# ─── 编译选项 ──────────────────────────────────────────────────────── +target_compile_options(${TARGET_NAME} PRIVATE + -Wall -Werror + -ffunction-sections -fdata-sections + $<$:-g -O0> + $<$:-O2> +) -target_compile_options(${TARGET_NAME} - PRIVATE - -Wall - -Werror - $<$:-g -O0> - $<$:-O2> -) \ No newline at end of file +target_link_options(${TARGET_NAME} PRIVATE + -Wl,--gc-sections + $<$:-s> +)