表示去找查找 /home/hxy下的makefile Makefile带来的好处——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 另一个好处,某工程有10万个源文件,如果其中某一个源文件发生改变,不需要重新编译整个工程,但是我们生成应用程序前需要将所有的源文件生成.o文件。makefile会根据文件更新时间而判断,是否需要重新编译源文件成.o文件,在生成应用程序时,只需要将所有的.o文件做链接即可。 编写完后,保存,在当前目录下执行make命令,生成可执行程序test Makefile里主要包含了五种类型的语句: 显式规则、隐式规则、变量定义、文件指示、注释 注:Makefile中可以直接调用shell命令。 显式规则: 隐式规则: 变量的定义: 文件指示: 包括了三个部分。 注释: Makefile注释使用”#”,若Makefile需要用到“#”,则需要做转义“#”。 Makefile与程序或其它脚执行顺序一样,都是自上到下。 简化2: 使用隐式规则,目标文件为.o文件,make自动推导搜索.c文件,并编译。 简化3: 使用隐式规则,目标的依赖为三个.o文件,fun1.o, fun2.o,main.o, make自动推导,找到相应.c文件生成找到.o文件。 例: 那么变量OBJS值为fun1.o fun2.o main.o 在定义一个变量之后,我们可以继续在变量后面加上新的值。追加的语法与C语言中复合运算的“+=”类似。 部份预定义变量:Linux基础之Makfile文件
Linux基础之Makfile文件
编译流程
Makefile的介绍
make: *** No targets specified and no makefile found. Stop.
”告诉make 读入name 作为makefile文件。 — make -C /home/hxy
Makefile简单的练习
#sample makefile script CC=gcc SRCS=fun1.c fun2.c main.c EXEC=test all: $(CC) $(SRCS) -o $(EXEC)
Makefile的组成
显式规则说明了如何生成一个或多个的目标文件。这是由Makefile 的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令
由于make有自动推导的功能,所以隐式的规则可以让程序员比较简略地书写Makefile,这是由make所支持,例如,makefile发现.o文件,程序就会自动去找.c文件,并编译成.o文件。
在Makefile中可定义一系列的变量,变量一般都是字符串,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上
Makefile的组成
#sample makefile script #注释 include other.make #文件指示,包含其他文件,其他文件中的变量会被包含进来 CC=gcc #CC,SRCS,EXEC为变量,都是字符串,使用时会完全被替换。 SRCS=fun1.c fun2.c main.c EXEC=test all: $(CC) $(SRCS) -o $(EXEC) #makefile命令部分,变量在被引用时需要加上$()或者${}
引用未定义的变量时,不会出错,但其值为空,即什么都没有。Makefile的规则(命令)
<target>:<depend> <tab> command1 <tab> command2 ……
Makefile的工作原理
#sample makefile script CC=gcc SRCS=fun1.c fun2.c main.c EXEC=test all: $(CC) $(SRCS) -o $(EXEC) clean: rm -rf $(EXEC)
.
“的规则,这称作缺省目标。Makefile自动检测更新
#sample makefile script CC=gcc OBJS=fun1.o fun2.o main.o EXEC=test all:$(OBJS) $(CC) $(OBJS) -o $(EXEC) fun1.o:fun1.c $(CC) -c fun1.c fun2.o:fun2.c $(CC) -c fun2.c main.o:main.c $(CC) -c main.c clean: rm -rf $(EXEC)
Makefile隐式规则
Makefile隐式规则 – 简化2
#sample makefile script CC=gcc OBJS=fun1.o fun2.o main.o EXEC=test all:$(OBJS) $(CC) $(OBJS) -o $(EXEC) fun1.o: fun2.o: main.o: clean: rm -rf $(EXEC)
Makefile隐式声明 – 简化3
#sample makefile script CC=gcc OBJS=fun1.o fun2.o main.o EXEC=test all:$(OBJS) $(CC) $(OBJS) -o $(EXEC) clean: rm -rf $(EXEC)
Makefile的变量替换
SRCS = fun1.c fun2.c main.cOBJS = $(SRCS:.c=.o)
Makefile优化
#sample makefile script CC=gcc SRCS=fun1.c fun2.c main.c OBJS=(SRCS:.c=.o) EXEC=test all:$(OBJS) $(CC) $(OBJS) -o $(EXEC) clean: rm -rf $(EXEC)
Makefile的变量追加
如: CFLAGS = -Wall CFLAGS += -O2 那么最终CFLAGS的值为 -Wall -O2
Makefile预定义变量
CC : 编译器类型 CFLAGS : 编译选项, 通常为-O2 -Wall -I -L LDFLAGS : 额外链接库 EXEC或APP : 应用程序名 SRCS : 源代码 OBJS : 目标文件
Makefile通用版(基本版)
# makefile example CC=gcc CFLAGS = -Wall -O2 CFLAGS += -I./ -L./ LFLAGS = -lpthread -lm SRCS = fun1.c fun2.c main.c OBJS=$(SRCS:.c=.o) EXEC=test all:$(OBJS) $(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LFLAGS) clean: rm -rf $(EXEC) $(OBJS)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算