cmake使用教程(实操版)(一)

cmake使用教程

本文主要借鉴《CMake+Pratice》一文,如果造成版权问题请联系作者删除。作者在网络上发现关于cmake的中英文材料都比较少,所以有了整理cmake的入门教程的想法。如果需要深入了解cmake的各种命令,建议在已有的项目中学习。在介绍本文的cmake内容之前,本文将整个使用教程分成七篇文章。

一、初识cmake

官网:www.cmake.org
优点:
1、开源代码,使用类BSD许可发布。
2、跨平台,并可以生成native编译配置文件,在linux/Unix平台,生成makefile,在苹果平台可以生成Xcode,在windows平台,可以生成MSVC的工程文件。
3、能够管理大型项目。
4、简化编译构建过程和编译过程。cmake的工具链:cmake+make。
5、高效率,因为cmake在工具链中没有libtool。
6、可扩展,可以为cmake编写特定功能的模块,扩展cmake功能。

缺点:
1、cmake只是看起来比较简单,使用并不简单;
2、每个项目使用一个CMakeLists.txt(每个目录一个),使用的是cmake语法。
3、cmake跟已有体系配合不是特别的理想,比如pkgconfig。

二、安装cmake

下载:centos7 yum -y install cmake

三、cmake的helloworld

1、准备工作

先在/backup/cmake下建立第一个练习目录t1。在t1下添加两个文件,分别是main.c和CMakeLists.txt。内容如下:
在这里插入图片描述

在这里插入图片描述

2、开始构建

指令: cmake .
成功建立如下:
在这里插入图片描述
可以发现,系统自动生成了如下的文件
在这里插入图片描述
包括:CMakeCache.txt、CMakeFiles、cmake_install.cmake、Makefile等中间文件。
指令:make
在这里插入图片描述
PS:可以使用make VERBOSE=1来查看make构建的详细过程。
这个时候已经生成了hello.
指令:./hello
在这里插入图片描述
以上是cmake构建的全部过程。

3、详细解释

对CMakeLists.txt的详细解释:

PROJECT(projectname [CXX] [C] [Java])

用这个指令定义工程名称,并且可以指定工程支持的语言,支持的语言列表是可以忽略的,默认情况表示支持所有语言。这个指令隐式的定义了两个cmake的变量:

<projectname>_BINARY_DIR
<projectname>_SOURCE_DIR

这两个变量可以用(这样不用担心写错工程名称)。

PROJECT_BINARY_DIR
PROJECT_SOURCE_DIR
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

这里先了解SET指令可以用来显示的定义变量即可。这里是

SET(SRC_LIST main.c)

如果有多个源文件,也可以定义为:

SET(SRC_LIST main.c t1.c t2.c)
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message")

这个指令是向终端输出用户定义的信息,包含三种类型:

SEND_ERROR#产生错误,生成过程被跳过。
STATUS#输出前缀为--d的信息。
FATAL_ERROR#立即终止所有的cmake过程。
ADD_EXECUTABLE(hello ${SRC_LIST})

定义了一个为hello的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表。

本例可以简化为如下CMakeList.txt

PROJECT(HELLO)
ADD_EXECUTABLE(hello main.c)

4、基本的语法规则

使用${}方式来取得变量中的值,而在IF语句中则直接使用变量名。
指令(参数1 参数2 …)
参数之间使用空格或者分号分隔开。如果加入一个函数fun.c

ADD_EXETABLE(hello main.c;fun.c)

指令是大小写无关的,参数和变量是大小写相关的。但是推荐你全部使用大写指令。

5、关于语法的困惑

可以使用双引号“”将源文件包含起来。处理特别难处理的名字比如fun c.c,则使用SET(SRC_LIST "fun c.c")可以防止报错。

6、清理工程

可以使用make clean清理makefile产生的中间的文件,但是,不能使用make distclean清除cmake产生的中间件。如果需要删除cmake的中间件,可以采用rm -rf *来删除中间件。

7、外部构建

在目录下建立一个build文件用来存储cmake产生的中间件,不过需要使用cmake …来运行。其中外部编译,PROJECT_SOURCE_DIR仍然指代工程路径,即/backup/cmake/t1,而PROJECT_BINARY_DIR指代编译路径,即/backup/cmake/t1/build。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值