Browse Source

【待合】简化main下的构建文件

master
Lizongdi 4 days ago
parent
commit
7adf9084e9
  1. 67
      main/CMakeLists.txt

67
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) 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) if(A_BUILD_MAIN_AS_STATIC_LIB)
add_library(${TARGET_NAME} STATIC main.c)
set_target_properties(${TARGET_NAME} PROPERTIES set_target_properties(${TARGET_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output
) )
else() else()
add_executable(${TARGET_NAME} main.c)
set_target_properties(${TARGET_NAME} PROPERTIES set_target_properties(${TARGET_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/output
) )
endif() endif()
#
target_compile_definitions(${TARGET_NAME} PRIVATE
$<$<CONFIG:Debug>:DEBUG>
${GLOBAL_ENABLED_MACROS}
)
# Include
target_include_directories(${TARGET_NAME} target_include_directories(${TARGET_NAME}
PRIVATE PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
${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) string(TOLOWER "${CMAKE_SYSTEM_NAME}" SYSTEM_NAME_LOWER)
if(CMAKE_CROSSCOMPILING AND NOT SYSTEM_NAME_LOWER MATCHES "linux|windows|darwin|android") 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() else()
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
target_link_libraries(${CURRENT_TARGET_NAME} target_link_libraries(${TARGET_NAME}
PUBLIC Threads::Threads PUBLIC Threads::Threads
PRIVATE ${CMAKE_DL_LIBS} PRIVATE ${CMAKE_DL_LIBS}
) )
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_libraries(${CURRENT_TARGET_NAME} PRIVATE rt) target_link_libraries(${TARGET_NAME} PRIVATE rt)
endif() endif()
endif() endif()
if(DEFINED GLOBAL_ENABLED_MODULES AND NOT GLOBAL_ENABLED_MODULES STREQUAL "") #
message(STATUS "[Main] Linking modules: ${GLOBAL_ENABLED_MODULES}") target_compile_options(${TARGET_NAME} PRIVATE
target_link_libraries(${TARGET_NAME} PUBLIC ${GLOBAL_ENABLED_MODULES}) -Wall -Werror
else() -ffunction-sections -fdata-sections
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
$<$<CONFIG:Debug>:-g -O0> $<$<CONFIG:Debug>:-g -O0>
$<$<CONFIG:Release>:-O2> $<$<CONFIG:Release>:-O2>
) )
target_link_options(${TARGET_NAME} PRIVATE
-Wl,--gc-sections
$<$<CONFIG:Release>:-s>
)

Loading…
Cancel
Save