- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
make的工作原理 Linux操作系统基础 设有一项目由以下文件构成: 源程序: main.c mytool1.c mytool2.c 头文件: mytool1.h mytool2.h 目标文件: main.o mytool1.o mytool2.o 可执行文件: tool mytool1.h mytool2.h main.c main.o mytool1.h mytool1.c mytool1.o tool mytool2.h mytool2.c mytool2.o Makefile的基本规则 Linux操作系统基础 Makefile定义了一系列的规则来指定文件的编译顺序,哪些文件需要重新编译,还可以执行操作系统的命令。 目标-关连-动作组成的一连串规则 #REMARK TARGET…:PREREQUISITES… …… Tab COMMAND …… 规则的目标 通常是最后需要生成文件的文件名 或是为了实现这个目的而必需的中间过程文件名 规则的依赖 生成规则目标所需要的文件名列表 注释 规则的命令行 shell命令或是可在shell下执行的程序 Makefile文件规则的例子: Linux操作系统基础 #Makefile Example tool : main.o mytool1.o mytool2.o Tab gcc –o tool main.o mytool1.o mytool2.o main.o : main.c mytool1.h mytool2.h Tab gcc –c main.c mytool1.o: mytool1.c mytoole1.h Tab gcc –c mytools1.c mytool2.o: mytool2.c mytoole2.h Tab gcc –c mytools2.c clean : rm –f tool *.o 伪目标 当参数较多,一行不能容下时,可用续行符\,但注意续行符后不能有空格。 当执行:make clean 时,伪目标中的指令被执行 Makefile文件中可以使用变量,或称作宏。 Linux操作系统基础 变量要在文件顶部,行的开头定义,且习惯使用大写字符。 定义:变量名=变量值 …(各变量值以空格区分) 引用:$(变量名) (当变量名只有一个字符时,可省略括号) #Makefile Example OBJ = main.o mytool1.o mytool2.o CC = gcc EXEC = tool $(EXEC) : $(OBJ) Tab $(CC) –o $(EXEC) $(OBJ) main.o : main.c mytool1.h mytool2.h Tab $(CC) –c main.c mytool1.o: mytool1.c mytoole1.h Tab $(CC) –c mytools1.c mytool2.o: mytool2.c mytoole2.h Tab $(CC) –c mytools2.c clean : rm –f tool *.o 在Makefile文件中变有几个经常使用的自动变量 Linux操作系统基础 $@ —— 代表目标文件 $^ —— 代表所有的依赖文件 $ —— 代表该目标的第一个依赖文件 $* —— 代表已删除后缀的目标文件 #Makefile Example OBJ = main.o mytool1.o mytool2.o CC = gcc EXEC = tool $(EXEC) : $(OBJ) Tab $(CC) –o $@ $^ main.o : main.c mytool1.h mytool2.h Tab $(CC) –c $ mytool1.o: mytool1.c mytoole1.h Tab $(CC) –c $ mytool2.o: mytool2.c mytoole2.h Tab $(CC) –c $ clean : rm –f $(EXEC) *.o 使用变量后,给编译带来了很大的灵活性 Linux操作系统基础 #Makefile Example OBJ = main.o mytool1.o mytool2.o CC = gcc EXEC = tool $(EXEC) : $(OBJ) Tab $(CC) –o $
文档评论(0)