Files
he/process/cloud_apps/cloud_router/CMakeLists.txt
T
2026-06-22 15:35:18 +08:00

163 lines
5.6 KiB
CMake

cmake_minimum_required(VERSION 3.5)
#声明编译环境
get_filename_component(MY_DIR_NAME "${CMAKE_SOURCE_DIR}" NAME)
#设备类型宏定义
include($ENV{PROJECT_ROOT}/build/cmake/detect_target_product.cmake)
#指定模块/程序名称 #-- 强制使用g++
project(${MY_DIR_NAME} )
# 设置全局编译选项
set(SRC_DIR "./")
#设置编译器以及输出文件路径
message("------cmake start [${PROJECT_NAME}] ---------[${CMAKE_SOURCE_DIR}]-----------------------")
set(CURRENT_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
# imx9
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
#通用编译选项
list(APPEND generic_compile_flags "-fPIC" "-rdynamic" "-Wno-psabi" "-Wno-unused-result" "-Wno-narrowing")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
#根据环境变量配置编译参数
if ($ENV{pd_complier_name} STREQUAL "complier_arm")
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm)
else()
#配置处理器
set(CMAKE_SYSTEM_PROCESSOR arm64)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
#配置系统名称
set(CMAKE_SYSTEM_NAME Linux)#配置编译器
message("-- Ready to set ${TARGET_PRODUCT} compile flags: $ENV{arm_compile_flags} CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{arm_compile_flags}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{arm_compile_flags}")
#配置sysroot路径
set(CMAKE_SYSROOT $ENV{arm_sysroot_path})
message("-- Ready to set ${TARGET_PRODUCT} sysroot path: $ENV{arm_sysroot_path}")
#根据编译器类型,声明库路径
set(LIB_A_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/lib/lib_a")
set(LIB_SO_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/lib/lib_so")
message("-- Ready to set LIB_A_PATH: ${LIB_A_PATH}")
message("-- Ready to set LIB_SO_PATH: ${LIB_SO_PATH}")
#配置输出目录
set(LIB_EXE_OUT_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/bin")
message("-- Ready to set LIB_EXE_OUT_PATH: ${LIB_EXE_OUT_PATH}")
#配置查找路径
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
#设置debug模式,断点有用
set(CMAKE_BUILD_TYPE "Release") #Debug/Release
#依赖头文件路径
include_directories(${CMAKE_SOURCE_DIR}/../../../include
${CMAKE_SOURCE_DIR}/../../../include/public
${CMAKE_SOURCE_DIR}/../../../include/interface
${CMAKE_SOURCE_DIR}/../../../include/open
${CMAKE_SOURCE_DIR}/../../../include/general_type
${CMAKE_SOURCE_DIR}/../../../lib_src/so_src/prsqlite/inc
${CMAKE_SOURCE_DIR}/../../../include/dev_model
${CMAKE_SOURCE_DIR}/../../../include/tinyxml2
${CMAKE_SOURCE_DIR}/../../../include/curl
${CMAKE_SOURCE_DIR}/../../../include/rapidjson
${CMAKE_SOURCE_DIR}/../../../include/utility
${CMAKE_SOURCE_DIR}/../reuse_utils/include
${CMAKE_SOURCE_DIR}/../processers/include
${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/../../../lib_src/so_src/premsstrategy/inc
${CMAKE_SOURCE_DIR}/../../../lib_src/so_src/prpublicmemory/inc
)
#待编译源文件
aux_source_directory(${CMAKE_SOURCE_DIR}/../reuse_utils/src SELF_SRC)
aux_source_directory(${CMAKE_SOURCE_DIR}/../processers/src SELF_SRC)
aux_source_directory(${CMAKE_SOURCE_DIR}/src SELF_SRC)
#设置可执行程序输出路径
set(EXECUTABLE_OUTPUT_PATH ${LIB_EXE_OUT_PATH})
#依赖库路径:cmake版本小于3.13,则利用link_directories
if (${CURRENT_VERSION} STRLESS "3.13")
link_directories(${LIB_A_PATH})
link_directories(${LIB_SO_PATH})
endif()
#生成可执行程序:link_directories需在add_executable之前,否则不生效
add_executable(${PROJECT_NAME} ${SELF_SRC})
#依赖库路径:cmake版本大于等于3.13,则利用target_link_directories
if (${CURRENT_VERSION} STRGREATER_EQUAL "3.13")
target_link_directories(${PROJECT_NAME} PUBLIC ${LIB_A_PATH})
target_link_directories(${PROJECT_NAME} PUBLIC ${LIB_SO_PATH})
endif()
#设置编译选项
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags})
#依赖库文件: 注意库的顺序 动态库->依赖库, 比如runtime_environ依赖version_data、cloud_command等库,则需先引用runtime_environ,再引用version_data、cloud_command等库
set(MY_LIB_FILES
cloud_protocol
cloud_communicator
commu_component
runtime_environ
version_data
cloud_command
cloud_data
cloud_repeater
running_data
upgrade_task
ssl_middleware
system_config
prpublicmemory
mutex_log
tinyxml2
curl
ssl
crypto
z
ssh
stdc++
dl
pthread
premsstrategy
prsqlite
prgeneral)
target_link_libraries(${PROJECT_NAME} ${MY_LIB_FILES})
#如果是Release版本,删除调试符号减少文件大小
if (CMAKE_BUILD_TYPE)
if (${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(TARGET_PATH "${EXECUTABLE_OUTPUT_PATH}/${PROJECT_NAME}")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND $ENV{STRIP} -s ${TARGET_PATH})
endif()
endif()
# 设置第二个输出路径,使用自定义命令复制文件
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $ENV{BOARD_DIR}/bin
)
message(${PROJECT_NAME})