目录
CMakeList.txt cmake配置文件 构建项目的一般流程梳理
1、编译环境参数声明
-
cmake版本要求声明:cmake_minimum_required(VERSION 3.6.0)
-
工程项目名称:project(communication)
-
系统平台类型声明:其中 C M A K E S Y S T E M N A M E 一般是通过启动编译的 b a t 脚本中的 c m a k e 构建命令设置进来的。 i f ( {CMAKE_SYSTEM_NAME}一般是通过启动编译的bat脚本中的cmake构建命令设置进来的。 if( CMAKESYSTEMNAME一般是通过启动编译的bat脚本中的cmake构建命令设置进来的。if({CMAKE_SYSTEM_NAME} MATCHES “Windows”)
message(STATUS “target platform: Windows”)
set(COMMUNICATION_OS_WINDOWS ON)
endif() -
其他参数
对C++版本的要求:set(CMAKE_CXX_STANDARD_REQUIRED ON)
C++版本:set(CMAKE_CXX_STANDARD 17)
编译类型:set(CMAKE_BUILD_TYPE “Release”)
2、代码引用
一般会将整个项目的代码按照模块逐个添加到cmake配置文件中,每个模块内分为头文件路径引用和源码文件引用。
set(communication_include_dirs
${PROJECT_SOURCE_DIR}/src/native/communication/src)
set(communication_source_files
${PROJECT_SOURCE_DIR}/src/native/communication/src/communicator.cpp)
3、protobug引用
4、输出产物声明
-
声明目标产物对应的源码文件范围:
set(target_source_files
${communication_source_files}
${business_source_files}) -
声明目标产物类型和对应的源码
add_library(
communication // 输出目标产物的名称
SHARED // SHARED 表示动态库,STATIC 表示静态库
${target_source_files}) // 目标产物对应的源码范围 -
声明目标产物对应的头文件范围
target_include_directories(
communication // 目标产物名称
PUBLIC // 什么含义???
${PROJECT_SOURCE_DIR}/src/native/business/include
${PROJECT_SOURCE_DIR}/src/native/magiclink/include
PRIVATE // 什么含义???
${communication_include_dirs}
${dm_adapter_include_dirs})
5、编译自定义参数
set(compile_definitions
-D_UNICODE // 什么含义???
BETA_BUILD
COMMUNICATION_EXPORT
DEVICE_MANAGER_EXPORT
BUSINESS_CONFIG_EXPORT)
target_compile_definitions(
communication
PRIVATE // 什么含义???
COMMUNICATION_API=
DEVICE_MANAGER_ADAPTER=
BUSINESS_CONFIG=
${compile_definitions})
6、声明链接库参数
- 添加库
find_library(log-lib log) // 引用三方log库,并重命名为log-lib
add_library(
softbus
SHARED
IMPORTED)
set_target_properties(
softbus
PROPERTIES
IMPORTED_LOCATION // 定义三方动态库的导入源地址
T H I R D P A R T Y S O U R C E D I R / v e n d o r / s o f t b u s / l i b / {THIRD_PARTY_SOURCE_DIR}/vendor/softbus/lib/ THIRDPARTYSOURCEDIR/vendor/softbus/lib/{ANDROID_ABI}/libsoftbus.so) - 声明链接库范围
set(link_libraries
${log-lib}
softbus
libprotobuf
proto_file) - 将目标产物与三方库链接
target_link_libraries(
communication
PUBLIC // 什么含义???
${link_libraries})
cmake 及 add_subdirectory命令介绍
CMake是一种跨平台编译工具,CMake主要是编写CMakeLists.txt文件,通过cmake命令将CMakeLists.txt文件转化为make所需的Makefile文件,再用make命令编译源代码生成可执行程序或库文件。
CMake详解
cmake编译选项与常用指令
【CMake】基本指令
CMAKE学习笔记
现代CMake高级教程
cmake生成器和编译器
cmake生成器介绍1:Cmake的生成器Generator
cmake生成器介绍2:CMake - 生成器(Generators)
生成器介绍、种类、生成器和编译器关系:CMake生成器
如何查看cmake命令行参数说明:cmake --help
cmake -S -B参数:cmake -S -B 参数
cmake -G参数:cmake的-G 参数