cmake_minimum_required(VERSION 3.12) project(kunlang_remake LANGUAGES C CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # ================================================= # 调试符号配置(关键修改) # ================================================= set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG") set(CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG") # Release 也保留符号(方便现场 gdb) set(CMAKE_CXX_FLAGS_RELEASE "-O2 -g -DNDEBUG") set(CMAKE_C_FLAGS_RELEASE "-O2 -g -DNDEBUG") # ================================================= # 基本配置 # ================================================= set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() # 构建产物输出到项目根目录/bin set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) # ================================================= # 编译 / 链接选项 # ================================================= # 通用警告 add_compile_options( -Wall -Wextra -ffunction-sections -fdata-sections ) # 根据构建类型追加编译选项 if(CMAKE_BUILD_TYPE STREQUAL "Release") add_compile_options(-O2) elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") add_compile_options(-O0) endif() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -Wl,--gc-sections" ) # ================================================= # 源文件 # ================================================= file(GLOB_RECURSE SOURCES_CPP CONFIGURE_DEPENDS src/*.cpp) file(GLOB_RECURSE SOURCES_C CONFIGURE_DEPENDS src/*.c) set(SOURCES ${SOURCES_CPP} ${SOURCES_C}) add_executable(${PROJECT_NAME} ${SOURCES}) # ================================================= # 头文件路径 # ================================================= target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/include/common ${CMAKE_SOURCE_DIR}/include/network ${CMAKE_SOURCE_DIR}/include/can ${CMAKE_SOURCE_DIR}/include/serial ${CMAKE_SOURCE_DIR}/include/protocol ${CMAKE_SOURCE_DIR}/include/business ${CMAKE_SOURCE_DIR}/include/business/instance ${CMAKE_SOURCE_DIR}/include/business/remote_ctrl ${CMAKE_SOURCE_DIR}/include/business/tbox ${CMAKE_SOURCE_DIR}/include/config $ENV{HOME}/aarch64_env $ENV{HOME}/aarch64_env/openssl/include $ENV{HOME}/aarch64_env/paho/include ) # ================================================= # 目标级编译选项 # ================================================= target_compile_options(${PROJECT_NAME} PRIVATE -static -static-libstdc++ -static-libgcc ) # ================================================= # 静态库链接 # ================================================= target_link_libraries(${PROJECT_NAME} $ENV{HOME}/aarch64_env/toolchain/aarch64-linux-musl/lib/libpthread.a $ENV{HOME}/aarch64_env/toolchain/aarch64-linux-musl/lib/libdl.a $ENV{HOME}/aarch64_env/toolchain/aarch64-linux-musl/lib/libm.a $ENV{HOME}/aarch64_env/toolchain/aarch64-linux-musl/lib/libc.a # $ENV{HOME}/aarch64_env/paho/lib/libpaho-mqtt3as.a $ENV{HOME}/aarch64_env/paho/lib/libpaho-mqtt3a.a $ENV{HOME}/aarch64_env/paho/lib/libpaho-mqttpp3.a # $ENV{HOME}/aarch64_env/openssl/lib/libssl.a # $ENV{HOME}/aarch64_env/openssl/lib/libcrypto.a )