(8)Linux Makefile | 依赖关系,依赖方法

本文详细介绍了Linux中Makefile的使用,包括依赖关系和依赖方法的概念,以及如何编写基本的Makefile,实现代码编译和项目的清理功能,同时讨论了PHONY伪目标的作用。

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

💭前言:

本篇文章会着重讲解Linux中的自动化构建代码工具: make/makefile的介绍与使用。

在Linux下编译代码时,每次都会输入

gcc code.c -o code.exe

 在删除可执行程序时,每次都会输入

rm -rf code.exe

这样非常的不方便,很麻烦,于是乎学习自动化构建代码是很重要的,它可以提高我们之后在Linux下编程的效率!

初识 Makefile 

首先,make是一条指令,而makefile是一个文件,makefile是需要自己创建的一个文件,并且makefile是一个具有特定格式的文本文件。

 在当前目录创建Makefile文件

现在有了 makefile 文件,下一步就是编写这个文件!

即在这个文件中添加对应的 "依赖关系" 和 "依赖方法"。

依赖关系与依赖方法

makefile:是在当前路径下的一个普通文件,它会包含两个东西

  • 依赖关系(Dependency Relationship)
  • 依赖方法(Dependent Method)

我们首先弄清楚一个概念,依赖是什么意思?什么是依赖?

假如你是个在校大学生,快要到月底了,这时候你可能就要打电话给你爸要生活费了。你打电话给你爸爸,说 "爸,我是你儿子。",这就是表明依赖关系。你打电话告诉你爸你是他儿子的时候,实际上你的潜台词就是 "我要依赖你"。你给你爸打电话说:"爸我是你儿子",说完就把电话一挂,对于你爸来说会一脸懵逼 —— "这孩子今天怎么了,这是被绑架了?",你爸就不太清楚了。也就是说,你在打电话时只是表明了依赖关系,但你并没有达到你想要做的目的(要下个月的生活费),所以正确的方法应该是:"爸,我是你儿子,我要下个月的生活费。",你表达了你是谁,并且要求给你打钱。

我是你儿子 —— 表明了 "依赖关系",因为依赖关系的存在,所以才能给你打钱。

打钱 —— 就是 "依赖方法",当你把依赖关系和依赖方法表明时,你就能达到要钱的目的。

依赖关系不对,依赖方法再对也没有用,比如你的舍友给你爸打电话,说:"我是你儿子的舍友,给我打钱!",你爸绝对不会打钱的。

依赖方法表明了,依赖方法不正确同样没有用,比如你打电话给你爸:说:"我是你儿子,给我打钱我要充游戏!",你爸也不会给你打钱的!

通过上面的比喻,相信你已经知道什么是依赖关系和依赖方法了,他们必须都为真。

依赖关系和依赖方法都要为真,才能达成要钱的目的!

Linux系统中,Makefile是一种常用的构建工具文件,用于自动化管理程序的编译过程。当你有多个源文件,并且其中一个或多个需要引用外部库才能编译时,Makefile可以帮助你处理这些依赖。 通常,在Makefile中,你会设置以下几个关键部分: 1. **规则(Rules)**:比如`%.o: %.c`,表示每个`.c`源文件都会生成一个`.o`目标文件。对于包含库的文件,可能会增加类似`libname.o: libname.c $(LIBS)`这样的规则,其中`$(LIBS)`代表需要链接的库列表。 2. **变量(Variables)**:例如`CC = gcc`, `CFLAGS = -Wall -g`, 定义了使用的编译器和编译选项。`LDLIBS = -L/path/to/library -llibrary_name`用于指定库的位置和库名。 3. **依赖(Dependencies)**:通过`-I`选项声明头文件目录,如`INCLUDES += -I/usr/include`, 通过`$(wildcard *.h)`获取所有头文件路径并加入到依赖链中。 4. **链接步骤(Linking step)**:使用`all: program`定义最终的目标,`program`由各个`.o`文件通过`$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LDLIBS)`链接生成。`$(OBJECTS)`是所有源文件经过编译后的.o文件名列表。 5. **清理规则(Clean rule)**: 如果你想添加一个命令来清除编译后的中间文件,可以添加一行`clean:` ```make clean: rm -f *.o program ``` 使用Makefile时,只需要运行`make`命令,它会根据文件内容自动处理依赖、编译和链接的过程。记得在实际操作前检查Makefile是否包含了所有正确的库信息和路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值