CMake典型应用参考样例

CMake是一个跨平台的自动化建构系统,用于管理软件构建过程。
很久很久以前编译一个C/C++工程通常采用手写Makefile文件的方法。
现在使用CMake则改为手写CMakeLists.txt文件,然后用CMake自动生成Makefile文件。
由于手写CMakeLists.txt比手写Makefile要简便许多,因此CMake逐渐流行起来。


典型应用场景
工程目录结构如下:

├─build/
├─src/
├─CMakeLists.txt
└─mk.sh

build目录是一个空目录,用于存放编译生成的临时文件。
src目录是源代码目录,下面有若干子目录。
CMakeLists.txt文件则在根目录,管理整个工程。
mk.sh是快速编译脚本,省去频繁地敲cmake和make指令,也可以根据需要添加更多便捷功能。

mk.sh中的关键指令:

cd ./build
cmake ../
make -j4

下面是一个典型的CMakeLists.txt示例,以此为基础稍作修改就能应用到实际项目中。
这个示例中,使用aux_source_directory来搜索指定目录下的所有源文件,并参与编译。
同时也可以使用list(REMOVE_ITEM)来屏蔽指定的源文件不参与编译。

# 最小版本要求
cmake_minimum_required(VERSION 3.0)

# 指定目标系统
set(CMAKE_SYSTEM_NAME Linux)

# 指定目标平台
set(CMAKE_SYSTEM_PROCESSOR arm)

# 指定交叉编译工具链的根目录
set(TOOLCHAIN_PATH "/root/toolchain/gcc")

# 指定C编译器
set(CMAKE_C_COMPILER "${TOOLCHAIN_PATH}/bin/arm-linux-gnu-gcc")

# 指定C++编译器
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_PATH}/bin/arm-linux-gnu-g++")

# 指定C选项
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_FLAGS "-static -Wall")
set(CMAKE_C_FLAGS_RELEASE "-O2")
set(CMAKE_C_FLAGS_DEBUG "-g -rdynamic -O0")

# 指定C++选项
set(CMAKE_CXX_STANDARD 99)
set(CMAKE_CXX_FLAGS "-static -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
set(CMAKE_CXX_FLAGS_DEBUG "-g -rdynamic -O0")

# 工程定义
project(main C CXX)

# 预定义
add_definitions(-DVERSION="1.0")

# 头文件包含路径
include_directories(
	./src
	./src/dir1
	./src/dir2
	./src/dir3
)

# 源文件
aux_source_directory(./src             SRC_LIST)
aux_source_directory(./src/dir1        SRC_LIST)
aux_source_directory(./src/dir2        SRC_LIST)
aux_source_directory(./src/dir3        SRC_LIST)

# 屏蔽特定源文件不参与编译
list(REMOVE_ITEM SRC_LIST "./src/dir2/file.c")

# 库文件路径
link_directories(build)

# 库文件
link_libraries(pthread)
link_libraries(m)

# 目标文件
add_executable(${PROJECT_NAME} ${SRC_LIST})

相关推荐

  1. CMake典型应用参考

    2024-06-12 16:18:03       30 阅读
  2. HElib 使用

    2024-06-12 16:18:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 16:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 16:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 16:18:03       82 阅读
  4. Python语言-面向对象

    2024-06-12 16:18:03       91 阅读

热门阅读

  1. 如何编写测试用例?

    2024-06-12 16:18:03       34 阅读
  2. Qt---pro文件的学习

    2024-06-12 16:18:03       29 阅读
  3. Bently nevada 125760-01 数据管理器输入模块

    2024-06-12 16:18:03       28 阅读
  4. python 启动 exe

    2024-06-12 16:18:03       23 阅读
  5. Adobe Illustrator 基础学习

    2024-06-12 16:18:03       26 阅读
  6. Web前端开发新书:探索技术与艺术的交融之旅

    2024-06-12 16:18:03       32 阅读
  7. 如何使用EMQX搭建一个私有的MQTT服务器

    2024-06-12 16:18:03       36 阅读
  8. go-zero入门学习教程(看了就会)

    2024-06-12 16:18:03       31 阅读