提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、CMake是什么?
CMake是一个跨平台的自动化构建系统,它使用配置文件(CMakeLists.txt)来生成标准的构建文件,如Unix的Makefile或Windows的Visual Studio工程文件。CMake非常灵活,能够支持复杂的构建过程,并允许开发者编写一次构建脚本,就能在多种操作系统和编译环境中使用。
以下是CMake的一些关键特性:
1.跨平台支持:CMake可以生成多种平台和编译器的构建文件,包括Linux、macOS、Windows等。
2.易于使用:CMake使用自己的一套语法和命令来编写构建脚本,这些脚本通常放在名为CMakeLists.txt的文件中。
3.自动依赖性处理:CMake能够处理复杂的依赖关系,包括源文件之间的依赖和外部库的依赖。
4.可定制的构建类型:CMake允许定义不同的构建类型,如Debug、Release、RelWithDebInfo、MinSizeRel等。
5.集成第三方库:CMake可以方便地查找和使用第三方库,如OpenGL、Boost等。
6.生成多种构建系统:CMake可以生成多种构建系统的工具文件,例如Unix的Make、Ninja、Visual Studio的解决方案文件等。
7.缓存机制:CMake使用缓存来存储已经确定的配置,这可以加速重复构建的过程。
8.命令行工具:CMake提供了命令行工具来执行构建、测试和安装等操作。
9.CPack集成:CPack是CMake的一个组成部分,用于生成二进制安装包。
10.社区和插件:CMake有一个活跃的社区,并支持许多插件和扩展。
CMake的使用通常包括以下步骤:
编写CMakeLists.txt文件来描述项目的构建过程。
使用cmake命令生成构建系统。
使用生成的构建工具(如make或ninja)来构建项目。
CMake是许多开源项目和商业软件选择的构建系统,特别是那些需要跨平台支持的项目。它的灵活性和强大功能使其成为项目管理和构建自动化的理想选择。
二、编写一个简单的CMake的代码工程
1.代码目录如下
test@ubuntu:~cmake_test2$ tree -L 2
.
├── build
│ ├── bin
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── Makefile
│ └── utils
├── CMakeLists.txt
├── include
│ └── utils.h
├── src
│ ├── CMakeLists.txt
│ └── test.c
└── utils
├── CMakeLists.txt
└── utils.c
7 directories, 9 files
2.主目录下的CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
#主目录生成也需要这里
set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
PROJECT (test2)
SET(CMAKE_CXX_FLAGS "-g")
SET(CMAKE_C_FLAGS "-g")
ADD_SUBDIRECTORY(./utils/ ./utils/)
ADD_SUBDIRECTORY(./src ./bin)
2.src目录下的CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
#副目录生成也需要进行指定交叉编译工具链
set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
file(GLOB SRC_LIST "./*.c") #注意里面语句的成对出现情况
include_directories(../include)
LINK_DIRECTORIES( ../build/utils) #在实际执行的时候就会去这个路径去找相应的静态库或者动态库文件
LINK_LIBRARIES(utils.so)
ADD_EXECUTABLE(src ${SRC_LIST}) #生成目标文件
2.utils目录下的CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
file(GLOB SRC_LIST "./*.c")
include_directories(../include)
ADD_LIBRARY(utils SHARED ${SRC_LIST})
3.include/utils.h
#ifndef UTILS_H
#define UTILS_H
int add(int a, int b);
#endif
4.src/test.c
#include <stdio.h>
#include "utils.h"
int main() {
printf("Hello, CMake!\n");
int result = add(2, 3);
printf("2 + 3 = %d\n", result);
return 0;
}
5.utils/utils.c
#include "utils.h"
int add(int a, int b) {
return a + b;
}
6.进入build目录,执行cmake …/
编译之后执行如下:
root@localhost:~/build/bin# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/build/utils
root@localhost:~/build/bin#
root@localhost:~/build/bin#
root@localhost:~/build/bin# ./src
Hello, CMake!
2 + 3 = 5
总结
以上就是使用CMake搭建工程的简单示例。