千家信息网

Makefile编写的方式

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Makefile编写的方式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Makefile编写的方式"吧!Makefile编写1. mak
千家信息网最后更新 2026年11月01日Makefile编写的方式

本篇内容主要讲解"Makefile编写的方式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Makefile编写的方式"吧!

Makefile编写

1. make和Makefile的介绍

1.1 make工具

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

如果仅仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。

1.2 Makefile

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

2. 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文件就写好了。

3. 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就更加简洁。

4. make常用的内嵌函数

函数调用

$(function arguments)

$(wildcard PATTERN)

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

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

$(patsubst PATTERN,REPLACEMENT,TEXT)

模式替换函数

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

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

shell函数

执行shell命令

例如:$(shell ls -d */)

到此,相信大家对"Makefile编写的方式"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 目标 规则 编译 命令 生成 变量 函数 工作 自动化 方式 内容 工具 模式 源文件 接下来 动作 多个 字符 文件名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 厦门中拓互联网络科技有限公司 涨乐互联网科技 科技互联网政务服务 合肥互联网科技公司 上海挚品互联网科技 广州互联网络科技有限公司 万达互联网科技 青海省互联网新科技 互联网科技公司招聘 互联网公司科技股 河南猎农互联网科技有限公司 想开互联网科技公司怎么样 本届互联网博览会上的黑科技 互联网科技圈年度人物 锡山区互联网智能科技产品供应 怎样加入科技互联网 每天都有哪些好的互联网科技 智帮互联网科技公司最近动向 云南省自由互联网科技有限公司 半导体是互联网高科技吗 互联网科技公司 互联网科技工作委员会副主任毛军 科技互联网政务服务 关于新基建和互联网科技 深圳艾佳互联网科技 天扬科技互联网广告 华脉科技工业互联网产品 成都玖崟互联网科技有限公司乐商圈怎么样 西藏七维空间互联网科技有限公司 滨湖区互联网智能科技产品有哪些
0