makefile学习之二

         前面学习了怎么使用cmd下编译可执行文件,可以看来在cmd下编译比较麻烦,特别当项目比较大的时候,cmd下就显得极繁琐。这时候需要使用makefile脚本,相对来说就容易多了。首先学习一下makefile的基本结构:

target  ...:prerequisites ....

recipe

......

......

这里recipe前面一定是tab键,否则make就会报错。target就是要生成的目标,prerequisites是target的依赖,接下来recipe是动作,一般是怎么生成target。以之前的那个工程为例,它的makefile脚本是这样的:

VPATH = `pwd`
INCLUDE = $(addprefix -I, $(VPATH))
hello:hello.c file1
    gcc $^ -o $@
file1:file1.c file1.h
    gcc -c $< -o $@ $(INCLUDE)
all:
    @echo $(VPATH) $(INCLUDE)
.PHONY:clean
clean:
    rm file1 hello

这里主要提一下几个注意点:1.makefile里面的第一个目标就是你最终想要得,在这里是hello。为什么要这么作呢?我的理解是make是一个lazy evaluatio的系统,只要完成了任务就可以了。在这个例子里面,如果将file1那个规则放在第一个上面,make就只会完成file1的编译,hello就不会在编译了。所以在写这些的时候一定要按照top-down的方法来些。

上述几个makefile知识点:addprefix 加前前zui,因为要加-I这个,$^是指所以的依赖,$<指第一个依赖;make 在编译的时候会自动替代,因此不需要再麻烦自己了,这些特殊符号叫自动变量;.PHONY是在脚本中定义一个符号,使得结构更加清楚,使用的时候可以直接make all这样。另外VPATH是make定义的环境变量,用来提供搜索目录的。但是这里有一个问题:如果编译file1的时候不把那个INCLUDE加进来,会提示说file1.h找不到。不是说要优先在本地的吗?找不到本地再在VPATH中搜索吗?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值