千家信息网

关于Makefile最基础,最管用的资料

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,接下来让我们从以下几个方面来进行详细的了解吧make和Makefile的介绍1.1 make工具利用make工具可以自动完成编译工作。这些工作包括:如果仅仅修改了某几个源文件,则只重新编译这几个源文件
千家信息网最后更新 2026年11月01日关于Makefile最基础,最管用的资料

接下来让我们从以下几个方面来进行详细的了解吧

  1. make和Makefile的介绍

1.1 make工具

利用make工具可以自动完成编译工作。这些工作包括:

如果仅仅修改了某几个源文件,则只重新编译这几个源文件;

如果某个头文件被修改,则重新编译所有包含该头文件的源文件。

利用这种自动编译可大大简化开发工作,避免不必要的重新编译。

1.2 Makefile

make工具通过一个称为Makefile的文件来完成并自动维护编译工作。Makefile文件描述了整个工程的编译、链接等规则。

  1. Makefile基本规则

TARGET ...:DEPENDENCIES ...

COMMAND

...

目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如clean,也称伪目标。

依赖(DEPENDENCIES)是用来产生目标的输入文件列表,一个目标通常依赖于多个文件。

命令(COMMAND)是make执行的动作(命令是shell命令或者是可在shell下执行的程序)。注意:每个命令行的起始字符必须为TAB字符。

如果DEPENDENCIES中有一个或多个文件更新的话,COMMAND就要执行,这就是Makefile最核心的内容。

接下来就根据这个Makefile基本规则来编写一个最基本的Makefile文件

.PHONY:clean

main:main.o sub.o add.o print.o

gcc -Wall -g main.o add.o sub.o print.o -o main

main.o:main.c

gcc -Wall -g -c main.c -o main.o

add.o:add.c add.h

gcc -Wall -g -c add.c -o add.o

sub.o:sub.c sub.h

gcc -Wall -g -c sub.c -o sub.o

print.o:print.c print.h

gcc -Wall -g -c print.c -o print.o

clean:

rm -f *.o main

我们可以看到,main是我们最终想要生成的目标文件,它依赖main.o sub.o add.o print.o这四个.o文件。因此要执行gcc -Wall -g main.o add.o sub.o print.o -o main命令来生成目标文件,但是当前没有这些.o文件,因此就要先生成这些.o文件。我们写了四条.o:.c然后执行gcc -Wall -g -c .c -o .o,这些语句就会生成目标文件的依赖项。

clean是一个伪目标文件,因为它没有依赖项。我们只是想通过make clean来将.o文件删除,但是我们通常要指定.PHONY:clean这条语句,用来显式的指定clean是伪目标,来防止当前目录下有一个同名的clean文件。这样,一个简单呢的Makefile文件就写好了。

  1. Makefile自动化变量

虽然像上述那样可以完成编译,但是明显非常麻烦,接下来介绍Makefile的自动化变量。

选项名 作用

$@ 规则的目标文件名

$< 规则的第一个依赖文件名

$^ 规则的所有依赖文件列表

我们使用这些自动化变量来尝试从写刚才的Makefile

.PHONY:clean

OBJ=main.o sub.o add.o print.o

main:$(OBJ)

gcc -Wall -g $^ -o $@

main.o:main.c

gcc -Wall -g -c $< -o $@

add.o:add.c add.h

gcc -Wall -g -c $< -o $@

sub.o:sub.c sub.h

gcc -Wall -g -c $< -o $@

print.o:print.c print.h

gcc -Wall -g -c $< -o $@

clean:

rm -f *.o main

我们定义了一个变量叫OBJ,他是我们的依赖项列表。然后使用自动化变量来代替对应的文件,如上所示。

但是,我们这些.c文件都要生成.o文件,这样写也非常麻烦,我们介绍另一些规则。

模式规则

%.o:%.c

后缀规则

.c:.o

我们来使用这两种规则:

.PHONY:clean

CC = gcc

CFLAGS = -Wall -g

OBJ = main.o sub.o add.o print.o

main:$(OBJ)

$(CC) $(CFLAGS) $^ -o $@

#%.o:%.c

.c.o:

$(CC) $(CFLAGS) -c $< -o $@

clean:

rm -f *.o main

使用这两个规则,就会将所有.c文件生成同名的.o文件,这样,Makefile就更加简洁。

  1. make常用的内嵌函数

函数调用

$(function arguments)

$(wildcard PATTERN)

当前目录写的匹配模式的文件

例如:src=$(wildcard *.c)

$(patsubst PATTERN,REPLACEMENT,TEXT)

模式替换函数

例如:$(patsubst %.c, %.o, \$src)

等价于$(src:.c=.o)

shell函数

执行shell命令

例如:$(shell ls -d */)
我是在基于sail-imx6q开发板的linux上实现上述步骤的,感兴趣的小伙伴也可以继续研究一下。
www.dianyu.net

文件 目标 规则 编译 命令 生成 变量 函数 工作 自动化 接下来 工具 模式 源文件 动作 多个 字符 文件名 目录 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 精品咖啡豆 哈尔滨大商圈互联网科技有限公司 互联网科技工作委员会主任 今日互联网科技 紫鲸互联网科技 贷财互联网科技 互联网金融科技平台 北京禾田雨橡互联网科技 华中科技有哪些互联网大佬 西藏七维空间互联网科技有限公司 全球顶尖互联网科技公司 世界互联网领先科技成果获奖 无锡工业互联网科技有限公司 工业互联网山东科技大学 从那以后互联网科技有限公司 互联网风格科技公司名称 工业互联网科技创业 互联网金融运营模式中的金融科技 保山浩联互联网科技有限公司 黑龙江互联网科技公司 新华互联网科技 互联网科技公司经营范围 友谊互联网络科技 互联网和高科技公司 中国互联网有什么科技含量 彤创互联网科技有限公司 美国互联网科技公司 互联网科技手机排行榜 互联网科技和医药行业 北京瑞云互联网科技有限公司
0