您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页CMake学习

CMake学习

来源:二三娱乐

目录

  1. 什么是CMake?
  2. linux平台安装CMake
  3. 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

  1. 首先去官网下载,选择“XX.tar.gz”源码安装包。
  2. 输入以下命令
$tar -zxvf xx.tar.gz
$./bootstrap
$make
$make install

输入以上命令后就安装后cmake了。

3. CMake的helloworld

在linux平台使用CMake生成Makefile并编译的流程如下:

  1. 编写CMake配置文件CMakeLists.txt。
  2. 执行命令 cmake path 生成Makefile。其中,PATH是CMakeLists.txt所在的目录。
  3. 使用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文件,依次出现了几个命令

  1. cmake_minimum_required:指定运行配置文件所需CMake的最低版本。
  2. project:参数值是HELLO,该命令表示项目的名称是HELLO。
  3. 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))

参考:

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务