make和makefile

make工具和makefile

c语言编译

c语言编译分为四步:

  1. 预处理: 将.c 中的头文件展开、宏展开 生成的文件是.i文件

gcc -E hello.c -o hello.i
  1. 编译:将预处理之后的.i 文件生成 .s 汇编文件

gcc -S hello.i –o hello.s
  1. 汇编: 将.s汇编文件生成.o 目标文件

gcc -c hello.s -o hello.o
  1. 链接:将.o 文件链接成目标文件

gcc hello.o -o hello

(图片来源:https://blog.csdn.net/KiWi_VC/article/details/80169906

makefile基本语法(一)

语法格式:

目标:依赖

(tab)命令

例子:

首先创建一个hello.c文件:

再在同一目录创建Makefile(makefile大小写无所谓,不影响make的执行)文件,内容如下:

此时文件夹下是这样的:

执行make命令,生成可执行文件hello,然后运行输出hello word!:

上述例子中:

目标:all

依赖:无(all:后面没有内容)

命令:gcc hello.c -o hello

上述例子也可以写成:

删除刚刚的可执行文件,然后重新make一下:

此时:

目标:all

依赖:hello.o和hello.c

命令:gcc hello.o -o hello 和 gcc -c hello.c -o hell.o

因为all需要依赖hello.o,所以程序先执行的是下面一行语句生成hello.o(如上图执行make的输出)

在编译的时候,我们可以使用 make 目标来编译,如果我们不指定目标的话,默认执行的是第一个目标所对应的规则。也就是说 make 和 make all 是一样的。如上面的例子。

接下来,我们使用 make 目标的方法来编译。我们修改 makefile 代码如下图所示:

然后我们输入命令“ make clean ”就可以直接执行 rm -rf *.o hello 命令。如下图所示。

但是,我们在当前目录下不能和 makefile 目标名一样的文件。比如我在当前目录下创建一个名为clean的文件,然后执行“ make clean ”命令就会报错。如下图所示。

为了解决这个问题,makefile 引入了一个新的概念,叫做伪目标,我们使用伪目标来声明clean就可以避免与当前目录下的同名文件发生冲突。

伪目标格式; .PHONY:目标

所以,我们可以把上面的代码修改成如下图所示:

然后我们在执行 make clean 命令。尽管当前目录下有 clean 同名文件,make clean 命令也可以执行成功。如下图所示。

持续更新中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值