hunting/doc/cmake_guide.md
2024-06-04 23:13:48 +08:00

118 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. CMake构建工具使用
  SDK使用CMake工具构建。
## 1.1. 安装
```code
详见://tools/cmake/Makefile
$ cd tools/cmake
$ make
$ cmake --version
cmake version 3.27.4
```
## 1.2. SDK构建配置脚本
* build目录下是基本的配置脚本。
```code
build/
├── cmake
│   ├── Makefile // 调用cmake命令生成Makefile文件
│   └── toolchain
│   └── linux.toolchain.cmake // 工具链配置文件已经一些全局变量;
├── global_config.cmake // 配置文件
└── sdk_config.cmake // 配置文件
```
### 1.2.1. //build/cmake/Makefile
  调用cmake命令生成Makefile文件。
```code
all:
@mkdir -p ../../cmake-shell;\
cd ../../cmake-shell;\
pwd;\
# 调用cmake命令并指定工具链配置文件生成Makefile文件。
cmake -DCMAKE_TOOLCHAIN_FILE="./build/cmake/toolchain/linux.toolchain.cmake" ..;\
cd ..
clean:
rm -rf ../../cmake-shell
```
### 1.2.2. //build/cmake/toolchain/linux.toolchain.cmake
  工具链配置文件或者一些跨平台差异化的配置文件。该文件在//build/cmake/Makefile中被指定当需要交叉编译时此文件的变量需要被重新配置。
```code
INCLUDE(CMakeForceCompiler)
set(LINUX_TEST "true")
set(CROSS_COMPILE_PREFIX "") // 工具链前缀
set(CMAKE_C_COMPILER "${CROSS_COMPILE_PREFIX}gcc") // 配置工具链
set(CMAKE_CXX_COMPILER "${CROSS_COMPILE_PREFIX}g++") // 配置工具链
# path to compiler and utilities
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# Name of the target platform
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# Version of the system
set(CMAKE_SYSTEM_VERSION 1)
cmake_policy(SET CMP0011 NEW)
cmake_policy(SET CMP0005 NEW)
add_definitions(-Wall -O2 -Os)
add_definitions(-Wno-unused-local-typedefs)
add_definitions(-Wstrict-aliasing -Wwrite-strings)
set(TOOLCHAIN_NAME arm-linux-gnueabihf)
set(TARGET_PLATFORM "linux") // 编译系统平台Linux表示在PC的ubuntu系统上编译
set(SUBMODULE_PATH_OF_IPC_SDK "") // 子仓库路面,此处为空,交叉编译时设置
set(PLATFORM_PATH "${CMAKE_CURRENT_SOURCE_DIR}") // 平台路径
set(TEST_COVERAGE "true") // 覆盖率报告开关
add_definitions(-DPLATFORM_PATH=\"${PLATFORM_PATH}\") // 定义一个宏
set(PROJECT_OUTPUT_FOLDER "output_files") // 编译的目标文件输出目录
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_OUTPUT_FOLDER}")
... // 此处省略不同模块的配置参数,一般是一些宏定义;
```
### 1.2.3. //CMakeLists.txt
  SDK跟目录下的第一个CMakeLists.txt文件cmake命令执行的时候会指定根目录到此目录下寻找CMakeLists.txt文件作为整个项目的构建起点。
## 1.3. 重要的配置
### 1.3.1. 目录设置
  目录结构都是通过.cmake脚本来配置的。
#### 1.3.1.1. 源码目录结构配置
详见://build/global_config.cmake
```code
set(EXEC_OUTPUT_PATH "${PLATFORM_PATH}/${PROJECT_OUTPUT_FOLDER}/bin")
set(LIBS_OUTPUT_PATH "${PLATFORM_PATH}/${PROJECT_OUTPUT_FOLDER}/libs")
set(TEST_TOOLS_OUTPUT_PATH "${PLATFORM_PATH}/${PROJECT_OUTPUT_FOLDER}/libs/test_tools")
set(EXTERNAL_LIBS_OUTPUT_PATH "${PLATFORM_PATH}/${PROJECT_OUTPUT_FOLDER}/libs/external")
set(TEST_OUTPUT_PATH "${PLATFORM_PATH}/${PROJECT_OUTPUT_FOLDER}/test")
set(PROJECT_ROOT_PATH "${PLATFORM_PATH}")
set(APPLICATION_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/application") # 应用层目录
set(MIDDLEWARE_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/middleware") # 中间件层目录
set(UTILS_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/utils") # 工具层目录
set(HAL_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/hal") # 硬件抽象层目录
set(TEST_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/test") # 自动化测试代码/example目录
set(EXTERNAL_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/external") # 外部依赖库目录
```