linux中如何使用make或gcc,Linux下简单使用make、makefile

本文针对程序员需求,详细比较了红轴和茶轴机械键盘的区别,并深入解析了Makefile在项目编译中的高效应用。通过实例演示如何编写和利用Makefile简化编译流程,提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

make的功能:make是一个解释makefile中命令的命令工具。他可以简化编译过程里面所下达的命令,当执行make时,make会在当前的目录下搜寻makefile(Makefile)这个文本文档(可以理解为编译的配置文档),执行对应的操作。make会自动的判别原始码是否经过变动了,而自动更新执行档。

原理:当make命令第一次执行时,它会扫描makefile找到目标以及其依赖。看这些依赖是否是目标,如果是那就继续为这些依赖扫描makefile找到它的依赖关系,建立它,并执行其方法。如果不是直接就可以建立关系,编译它们。

为什么要使用make?

假设,现在一个项目里面包含了100个进程文档,如果要对这个项目进行编译,那么光是编译命令就是100条。如果要重新进行编译,那么就得像之前全部重来一次。这么低效的方法我们进程员肯定是忍不了,不符合我们进程员的作风。所以,用make来进行操作,间接的调用gcc岂不是很便捷?如果我们更动过某些源文档,make也可以主动的判断哪一个源文档与相关的目标文档有更新过,并且仅更新该目标文档。这样不但减少了重新编译所需要的时间,使用起来也更加方便。

gcc编译器和make命令工具安装

在Linux终端中执行

安装gcc编译器:1sudo apt install gcc

安装make命令工具:1sudo apt install make

两个一路等待下载执行完成。

makefile的规则语法1

2目标(target): 目标文档1 目标文档2

gcc -o 预建立的执行文档 目标文档1 目标文档2

注意:建立执行语法(也就是gcc那条语句)必须以tab键开头,不可以使用空格代替。

目标(target)就是我们想要建立的信息,而目标文档就是具有相关性的object files。

语法:在makefile当中的#代表批注;

tab键需要在命令行(例如gcc这个编译进程命令)的开头第一个字符;

目标(target)与相关目标文档之间需要用 : (分号)隔开;

makefile使用举例说明

我们要编译main.c、test1.h、test2.h、test3.h生成可执行进程TEST。

我们可以直接使用gcc这样写:1gcc -o TEST main.c test1.h test2.h test3.h

但是就像上面说的,我们之后发现了test2.c里面的内容写错了,改好之后要重新编译,我们接着输入上面的命令进行编译。但是如果我们一个项目有很多文档时,就很麻烦了。我们可以写个makefile简化方便执行。

创建一个makefile或者Makefile文档(必须是),因为make命令在编译时它会查找以下文档是否有makefile或者Mkefile:1touch makefile

vi命令进入makefile:1vi makefile

修改makefile文档如下:1

2TEST: main.c test1.h test2.h test3.h

gcc -o TEST main.c test1.h test2.h test3.h

我的main.c、test1.h、test2.h、test3.h内容如下:

一切准备完成之后,我们直接执行make即可编译文档:1make

编译完成后,我们看到目录下产生了TEST文档,接下来执行它试试看:1./TEST

如果现在再对文档编译一次会发生什么呢?可以试一下。

如果修改了其中一个文档再编译一下又会发生什么?

现在我们在makefile里面定义一个clean,用来执行rm的操作:1

2

3

4TEST: main.c test1.h test2.h test3.h

gcc -o TEST main.c test1.h test2.h test3.h

clean:

rm -f TEST

执行:1make clean

这里调用了clean,就把之前编译完成的TEST文档删除了。

像我们有多个文档需要处理,可以在makefile里面定义一个变量:1

2

3

4

5OBJS = main.c test1.h test2.h test3.h

TEST: $(OBJS)

gcc -o TEST $(OBJS)

clean:

rm -f TEST

结果和上面写法一样,如果我们执行make clean TEST,先调用clean清除,然后调用了TEST编译。

注意:变量名左边不可以加tab键;

变量与变量内容用 = (等号)隔开;

变量名最好大写,为了编码风格;

运用变量时,以$(变量名)或者${变量名}使用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值