make和cmake简要介绍

GCC

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

基本用法:gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
options的选项与功能:
-c,只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。
-v gcc执行时执行的详细过程,gcc及其相关程序的版本号

为什么需要make和cmake指令?
虽然gcc编译指令使用起来非常方便,但是也仅仅是针对源文件数量较少,类型较为单一的情况。如果我们要使用gcc来编译一个大型的项目,其中包括了很多的源文件,甚至还有不同类型的源文件,那我们需要手动去一个个编译就太痛苦了。
所以这时候就需要make和cmake指令了。

make

make是一个自动化编译工具,但是它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。对于一个工程文件而言,我们使用make指令就能完全的编译整个工程的源文件,相比于使用gcc来编译,效率就大大提高了。但是需要编写一个规则文件,Make工具依据它来批量处理编译,这个文件就是Makefile文件。

makefile文件的示例:
在这里插入图片描述

但是这里有出现了一个新的问题了,我们需要编写makefile文件来使得make按照一定的规则去编译,对于一个简单的工程而言,makefile的编写非常的简单,但是当工程很大的时候,依旧是个麻烦。同时makefile是分平台的,也就是说当我们换了一个新的平台之后,又需要重新去编写makefile文件,依旧麻烦。
所以这时候cmake登场了。

cmake

CMake是一种跨平台编译工具,比Make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用CMake命令将CMakeLists.txt文件转化为Make所需要的Makefile文件,最后用make命令编译源码生成可执行程序或共享库。
但这里其实也有新问题,那就是cmakelists的编写,不过相比较前面的问题,这里就相对容易许多,不是那么繁琐。

用流程图表示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值