目录
- 什么是CMake?
- linux平台安装CMake
- CMake的helloworld
1. 什么是CMake?
Make工具应该大家都用过,但是不同平台的Make工具遵循着不同的规范和标准,例如GUN Make,QT的qmake,微软的MS nmake等等。这样就带来了一个严峻的问题,如果软件需要跨平台,必须要保证能够在不同平台编译。而如果使用上面的Make工具,就需要为每一种标准写一次Makefile。
CMake就是针对上面问题所设计的工具。
它使用一种平台无关的CMakeLists.txt文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如Unix的Makefile或Windows的Visual Studio工程。从而做到“Write once, run everywhere”。很多知名的开源项目都有使用CMake作为项目构架系统,如KDE、OpenCV等。
2. linux平台安装CMake
- 首先去官网下载安装包,选择“XX.tar.gz”源码安装包。
- 输入以下命令
$tar -zxvf xx.tar.gz
$./bootstrap
$make
$make install
输入以上命令后就安装后cmake了。
3. CMake的helloworld
在linux平台使用CMake生成Makefile并编译的流程如下:
- 编写CMake配置文件CMakeLists.txt。
- 执行命令 cmake path 生成Makefile。其中,PATH是CMakeLists.txt所在的目录。
- 使用make命令进行编译。
以下使用一个简单的示例说明以下。
新建一个目录t1,建立main.c和CMakeLists.txt。
main.c文件内容:
//main.c
#include <stdio.h>
int main()
{
printf(“Hello World from t1 Main!\n”);
return 0;
}
CMakeLists.txt的文件内容:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project(HELLO)
# 指定生成目标
add_executable(hello main.c)
CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,参数和变量是大小写相关的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格或分号进行间隔。
以上CMakeLists.txt文件,依次出现了几个命令
- cmake_minimum_required:指定运行配置文件所需CMake的最低版本。
- project:参数值是HELLO,该命令表示项目的名称是HELLO。
- add_executable:将名为main.c的源文件编译为一个名称为hello的可执行文件。
上面的例子只有一个源文件,现在如果main.c下有其他的源文件需要参与编译,需要把CMakeLists.txt修改如下:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project(HELLO)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(hello ${DIR_SRCS})
这样,CMake会讲当前目录所有源文件的文件名赋值给变量DIR_SRCS,再指示DIR_SRCS中的源文件需要编译成一个名称为hello的可执行文件。
如果我们需要把源文件编译为一个静态库,修改CMakeLists.txt如下
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (hello ${DIR_LIB_SRCS})
命令 add_library 将目录中的源文件编译为静态链接库。
如果要生成动态库修改脚本的最后一行如下:
add_library (hello SHARED $(DIRLIB_SRCS))
参考:
网友评论