makefile如何使用(网站制作怎么接单流程图)
一、什么是Makefile?
Makefile,顾名思义,是Make工具的输入文件。它以一系列的规则(Rule)和变量(Variable)为基础,定义了项目中的编译、链接、安装操作。当Make工具读取Makefile文件后,文件中的规则,自动完成相应的构建任务。
二、Makefile的结构
一个典型的Makefile文件包含几个部分
1, 规则(Rule)规则是Makefile的核心,用于定义构建任务。规则包含三个部分目标(Target)、依赖关系(Dependencie)和命令(Command)。
2, 变量(Variable)变量用于存储修改的值,如编译器、编译选项。Makefile中,变量用来提高代码的复用性和灵活性。
3, 预处理器(Preproceor)预处理器负责对Makefile进行预处理,生成新的Makefile文件。预处理中,宏、条件编译、文件包含功能被应用。
4, 函数(Function)函数是Makefile的高级特性,用于简化复杂的规则和变量定义。
三、编写Makefile的技巧
1, 保持简洁尽量使Makefile文件保持简洁,避免过多的层次和复杂的逻辑。
2, 利用宏合理运用宏简化Makefile的编写,提高代码的复用性。
3, 模块化再将Makefile拆分为多个文件,有利于管理和维护。
4, 考虑移植性Makefile不同的操作系统和编译器上都能正常工作。
四、实际应用
一个简单的C语言项目Makefile示例
```
定义编译器
CC=gcc
定义编译选项
CFLAGS=-Wall -g
定义源文件
SOURCES=main.c
定义目标文件
OBJECTS=$(SOURCES:.c=.o)
定义执行文件
EXECUTABLE=project
all: $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
t$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
t$(CC) $(CFLAGS) -c $< -o $@
clean:
trm -rf .o $(EXECUTABLE)
```
这个例子中,我们定义了编译器、编译选项、源文件、目标文件和执行文件。规则定义了编译、链接和清理操作。
Makefile是构建项目的利器,掌握其编写技巧和实际应用,能让我们加高效地完成软件开发。的,相信对Makefile有了深入的了解。实际开发中,不断和优化Makefile,再将为的项目带来多的便利。
参考文献
[1] 李忠,李志军. Makefile原理与应用[M]. 北京机械工业出版社,2014,
[2] 张洪波. Makefile实用教程[M]. 北京人民邮电出版社,2013,
[3] 《Makefile权威指南》[M]. 王勇,译. 北京清华大学出版社,2016.
linux上的makefile怎么用
一、Makefile的规则
讲述这个Makefile,还是先来粗略地看一看Makefile的规则。
target...: prerequie...
command
.......
target也是一个目标文件,是Object File,是执行文件。还是一个标签
(Label),标签这种特性,后续的“伪目标”章节中有叙述。
prerequie是,要生成那个target所的文件或是目标。
command也是make执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,target这一个或多个的目标文件依赖于prerequii
te中的文件,其生成规则定义command中。
二、一个示例
正如前面所说的,一个工程有3个头文件,和8个C文件,为了完成前面的那三
个规则,的Makefile应该是下面的这个样子的。
ed: main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
cc-o ed main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
main.o: main.c def.h
cc-c main.c
kbd.o: kbd.c def.h command.h
cc-c kbd.c
command.o: command.c def.h command.h
cc-c command.c
diplay.o: diplay.c def.h buffer.h
cc-c diplay.c
inert.o: inert.c def.h buffer.h
cc-c inert.c
earch.o: earch.c def.h buffer.h
cc-c earch.c
file.o: file.c def.h buffer.h command.h
cc-c file.c
util.o: util.c def.h
cc-c util.c
clean:
rm ed main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
反斜杠()是换行符的意思。这样比较方便Makefile的易读。把这个内容保存
文件为“Makefile”或“makefile”的文件中,然后该目录下直接输入命令“make”
生成执行文件ed。要删除执行文件和所有的中间目标文件,那么,只要简单地
执行一下“make clean”了。
这个makefile中,目标文件(target)包含执行文件ed和中间目标文件(.o),依
赖文件(prerequie)是冒号后面的.c文件和.h文件。每一个.o文件都有
一组依赖文件,而这些.o文件又是执行文件 ed的依赖文件。依赖关系的实质上是
说明了目标文件是由哪些文件生成的,换,目标文件是哪些文件新的。
定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,以
一个Tab键作为开头。记住,make并不管命令是怎么工作的,他只管执行所定义的命令。m
ake比较target文件和prerequie文件的修改日期,prerequie文件的日期
要比target文件的日期要新,或者target不存的话,那么,make执行后续定义的命
令。
这里要说明一点的是,clean不是一个文件,它只是一个动作名字,有点像C语言中的
lable一样,其冒号后什么也没有,那么,make不自动去找文件的依赖性,也不自
动执行其后所定义的命令。要执行其后的命令,要make命令后明显得指出这个lable的
名字。这样的方法非常有用,一个makefile中定义不用的编译或是和编译无关
的命令,比如程序的打包,程序的备份,。
三、makefile中用变量
上面的例子中,先让看看ed的规则
ed: main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
cc-o ed main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
看到[.o]文件的字符串被重复了两次,的工程加入一个新的[.o]文
件,那么两个地方加(应该是三个地方,还有一个地方 clean中)。
的makefile并不复杂,两个地方加也不累,可makefile变得复杂,那么我
们有忘掉一个加入的地方,而编译失败。为了makefile的易维护
,makefile中用变量。makefile的变量也是一个字符串,理解成 C语言中
的宏好。
声明一个变量,叫object, OBJECTS, obj, OBJS, obj,或是 OBJ,反正不管
什么啦,只要可以表示obj文件行了。makefile一开始这样定义
object= main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
于是,很方便地的makefile中以“$(object)”的方式来用这个变量
了,于是的改良版makefile变成下面这个样子
object= main.o kbd.o command.o diplay.o
inert.o earch.o file.o util.o
ed:$(object)
cc-o ed$(object)
main.o: main.c def.h
cc-c main.c
kbd.o: kbd.c def.h command.h
cc-c kbd.c
command.o: command.c def.h command.h
cc-c command.c
diplay.o: diplay.c def.h buffer.h
cc-c diplay.c
inert.o: inert.c def.h buffer.h
cc-c inert.c
earch.o: earch.c def.h buffer.h
cc-c earch.c
file.o: file.c def.h buffer.h command.h
cc-c file.c
util.o: util.c def.h
cc-c util.c
clean:
rm ed$(object)
于是有新的.o文件加入,只需简单地修改一下 object变量了。
四、make是如何工作的
默认的方式下,输入make命令makefile编译程序时,具体的内部机制如下
1、make当前目录下找名字叫“Makefile”或“makefile”的文件。
2、找到,它找文件中的个目标文件(target),上面的例子中,他找到“
ed”这个文件,并把这个文件作为终的目标文件。
3、ed文件不存,或是ed所依赖的后面的.o文件的文件修改时间要比ed这个
文件新,那么,他执行后面所定义的命令来生成ed这个文件。
4、ed所依赖的.o文件也不存,那么make当前文件中找目标为.o文件的依赖性
,找到则再那一个规则生成.o文件。(这有点像一个堆栈的)
5、你的C文件和H文件是存的啦,于是make生成.o文件,然后再用.o文件生
命make的任务,也是执行文件ed了。
这是整个make的依赖性,make一层又一层地去找文件的依赖关系,直到终编译出第
一个目标文件。找寻的中,出现错误,比如被依赖的文件找不到,那么ma
ke直接退出,并报错,而所定义的命令的错误,或是编译不成功,make根本不理
。make只管文件的依赖性,即,我找了依赖关系之后,冒号后面的文件还是不,
那么对不起,我不工作啦。
上述,知道,像clean这种,没有被个目标文件直接或间接关联,那么它
后面所定义的命令再将不被自动执行,,显示要make执行。即命令——“ma
ke clean”,以此来清除所有的目标文件,重编译。
于是编程中,这个工程已被编译过了,当修改了其中一个源文件,比如fi
le.c,那么的依赖性,的目标file.o被重编译(也是这个依性关系后
面所定义的命令),于是file.o的文件也是的啦,于是file.o的文件修改时间要比ed
要新,ed也被重新链接了(详见ed目标文件后定义的命令)。
而改变了“command.h”,那么,kdb.o、command.o和file.o都被重编译,并
且,ed被重链接。
makefile怎么用
Makefile是用于自动化编译的工具,它告诉 Make程序如何编译源文件。假设生成一个名为 my_exe.exe的执行文件,这个执行文件依赖于三个源文件 a1,c、a2,c和 a3,c。那么,Makefile这样写
my_exe.exe: a1,o a2,o a3,o
ld-o my_exe.exe a1,o a2,o a3,o
这段代码说明,my_exe.exe依赖于 a1,o、a2,o和 a3,o。这些文件都存,Make再将执行链接命令。某些.o文件不存,则执行下面的编译步骤。
%.o:%.c
cc-o$@$<
这段代码说明,任何以.o结尾的文件都依赖于与其同名的.c文件。.c文件存,则用 cc编译器再将其编译为.o文件。.c文件不存,则报错。
这种方式,Makefile可以自动检测源文件的变化,并仅编译新的文件,从而提高编译效率。
Makefile的关键于定义规则,这些规则描述了如何从源文件生成目标文件。上面的例子中,我们定义了两个规则一个用于链接.o文件生成执行文件,个用于编译.c文件生成.o文件。这些规则依赖关系连接一起,使得 Make自动执行相应的编译步骤。
用 Makefile显著简化复杂的编译,大型项目中,大大减少手动编译的繁琐工作。合理地组织 Makefile,开发者每次编译都是一致且高效的。
Makefile还支持条件编译、变量定义和函数扩展功能,使得适应各种复杂的需求。这些高级特性,Makefile成为现代软件开发中不或缺的工具之一。
Makefile是强大的编译工具,可以帮助开发者高效地管理复杂的编译。合理地设计 Makefile,大大提高开发效率和代码质量。
如何编写makefile
你先用gcc把它给编译出来。然后再想用makefile
gcc的用法是
gcc-o要生成的执行文件名源代码文件名
如gcc-o hello.x hello.c
一些头文件要指明的话,这样
gcc-o hello.x-I头文件所的文件夹-l一些库名 hello.c
,我们用到一些数学库。gcc-o hello.x-lm hello.c
makefile的话,你基于上述的语句进行修改建议你看点资料,或一些典型的例子。注意的是规则那一行,得用Tab键打头。
hello.x: hello.o
gcc-o hello.x hello.o(这一行,得用Tab打头)
hello.o: hello.c头文件
相关知识
花店养护流程图(花店养护流程图怎么画)
如何绘制好看的流程图,5步美化流程图!
魔兽世界10.0订单系统怎么玩 下单接单制作订单方法详解
物流流程图怎么画?一文详解流程图绘制过程
【流程图】注册登录
教你如何用Visio创建业务流程图(包括基本流程图和跨职能流程图(泳道图))
怎么制作b2c网站
用户登录注册流程图分享,简单制作系统流程图
程序员必备画图技能之——流程图
推荐几个鲜花接单平台
网址: makefile如何使用(网站制作怎么接单流程图) https://www.huajiangbk.com/newsview1909641.html
上一篇: 韩国漫画 |
下一篇: 泰拉瑞亚为什么会停止,制作个人网 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039