148 lines
5.2 KiB
CMake
148 lines
5.2 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)
|
|
|
|
|
|
# 定义宏 POWEROAD_COMPILED_LIB
|
|
add_compile_definitions(POWEROAD_COMPILED_LIB)
|
|
|
|
#指定模块/程序名称 #-- 强制使用g++
|
|
project(${MY_DIR_NAME} LANGUAGES CXX)
|
|
|
|
set(SRC_DIR "./")
|
|
|
|
message("--------------------------------cmake start [${PROJECT_NAME}]--------------------------------")
|
|
|
|
set(CURRENT_VERSION "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}")
|
|
|
|
#通用编译选项
|
|
list(APPEND generic_compile_flags "-fPIC" "-rdynamic" "-Wno-psabi" "-Wno-unused-result" "-Wno-narrowing")
|
|
|
|
#根据环境变量配置编译参数
|
|
if ($ENV{pd_complier_name} STREQUAL "complier_arm")
|
|
#配置处理器
|
|
set(CMAKE_SYSTEM_PROCESSOR arm)
|
|
else()
|
|
#配置处理器
|
|
set(CMAKE_SYSTEM_PROCESSOR arm64)
|
|
endif()
|
|
|
|
# 设置 C++ 标准
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
#配置系统名称
|
|
set(CMAKE_SYSTEM_NAME Linux)#配置编译器
|
|
message("-- Ready to set ${TARGET_PRODUCT} compile flags: $ENV{arm_compile_flags}")
|
|
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")
|
|
|
|
#配置输出目录
|
|
set(LIB_EXE_OUT_PATH "$ENV{PROJECT_ROOT}/out/$ENV{TARGET_PRODUCT}/bin")
|
|
message("-- Ready to set ${TARGET_PRODUCT} LIB_EXE_OUT_PATH: $ENV{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/public
|
|
${CMAKE_SOURCE_DIR}/../../../include/open
|
|
${CMAKE_SOURCE_DIR}/../../../include/general_type
|
|
${CMAKE_SOURCE_DIR}/../../../include/utility
|
|
${CMAKE_SOURCE_DIR}/include
|
|
)
|
|
|
|
# 查找src目录下的所有*.cpp,*.c源文件,并将文件列表保存到 DIR_LIB_SRCS 变量
|
|
# 递归地查找所有.cpp文件
|
|
file(GLOB_RECURSE CPP_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.cpp)
|
|
# 递归地查找所有.c文件 #实测没用,只能编cpp
|
|
file(GLOB_RECURSE C_SOURCES ${CMAKE_SOURCE_DIR}/${SRC_DIR}/*.c)
|
|
|
|
# 将两者合并到SRC_LIST列表中
|
|
set(SRC_LIST ${C_SOURCES} ${CPP_SOURCES} )
|
|
|
|
|
|
# 排除 demo/ 目录下的所有文件
|
|
foreach(SOURCE IN LISTS SRC_LIST)
|
|
if("${SOURCE}" MATCHES ".*/demo/.*" OR "${SOURCE}" MATCHES ".*/build/.*")
|
|
list(REMOVE_ITEM SRC_LIST ${SOURCE})
|
|
endif()
|
|
endforeach()
|
|
|
|
#message("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n ${SRC_LIST} \n################################################")
|
|
|
|
|
|
# 提取current目录的父目录名称
|
|
get_filename_component(PARENT_DIR "${CMAKE_SOURCE_DIR}" PATH)
|
|
get_filename_component(PARENT_DIR_NAME "${PARENT_DIR}" NAME)
|
|
|
|
# 根据父目录名称决定编译为静态库还是动态库
|
|
if("${PARENT_DIR_NAME}" STREQUAL "a_src")
|
|
message("=========.a=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
|
|
#--------------------设置输出静态库-----------------------------------
|
|
#设置生成目录
|
|
set(LIBRARY_OUTPUT_PATH ${LIB_A_PATH})
|
|
|
|
#生成静态库.a文件
|
|
add_library(${PROJECT_NAME} STATIC ${SRC_LIST})
|
|
|
|
#设置编译选项
|
|
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
|
|
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags})
|
|
|
|
elseif("${PARENT_DIR_NAME}" STREQUAL "so_src")
|
|
message("=========.so=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
|
|
|
|
|
|
|
|
#动态库输出路径
|
|
set(LIBRARY_OUTPUT_PATH ${LIB_SO_PATH})
|
|
add_library(${PROJECT_NAME} SHARED ${SRC_LIST})
|
|
#设置编译选项
|
|
message("-- Ready to set generic compile flags: ${generic_compile_flags}")
|
|
target_compile_options(${PROJECT_NAME} PRIVATE ${generic_compile_flags} "-fPIC")
|
|
# =========================设置输出路径 ===============================
|
|
# #生成动态库.so文件
|
|
message(" PROJECT_NAME= ${PROJECT_NAME}")
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_SO_PATH})
|
|
|
|
else()
|
|
message("=========.exc=======PARENT_DIR_NAME = ${PARENT_DIR_NAME}")
|
|
message(FATAL_ERROR "sqlite directory not found in expected locations.")
|
|
endif()
|
|
|
|
# 在Release模式下,添加自定义命令来strip动态库
|
|
set(TARGET_PATH ${LIBRARY_OUTPUT_PATH}/lib${PROJECT_NAME}.so)
|
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
|
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
|
|
COMMAND $ENV{STRIP} -s ${TARGET_PATH}
|
|
COMMENT "Stripping symbols from ${TARGET_PATH}"
|
|
)
|
|
endif()
|
|
|
|
# 设置第二个输出路径,使用自定义命令复制文件
|
|
add_custom_command(
|
|
TARGET ${PROJECT_NAME}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> $ENV{BOARD_DIR}/lib
|
|
)
|
|
|