当前位置: 技术问答>linux和unix
各位高手,我想请问unix下的makefile文件具体该如何写,请大家各抒自见,参加者有分,欢迎大家提供有益线索和经验! 越详细越好!!
来源: 互联网 发布时间:2015-05-11
本文导语: 各位高手,我想请问unix下的makefile文件具体该如何写,请大家各抒自见,参加者有分,欢迎大家提供有益线索和经验!!! 越详细越好!!! | 26 $(CC) $(CFLAGS) S o $*.s $.depend 44 gc...
各位高手,我想请问unix下的makefile文件具体该如何写,请大家各抒自见,参加者有分,欢迎大家提供有益线索和经验!!!
越详细越好!!!
越详细越好!!!
|
26 $(CC) $(CFLAGS) S o $*.s $.depend
44 gcc -MM $(patsubst %.o,%.c,$(PROGS_O)) >>.depend
45
46 include .depend
范例一是笔者的cshow程式的makefile,其中01至05行以#开头作为注解用;
07至 14行是设定变数,其中07-10所设定的是有关编译器及其命令,11至14行则设
定被编 译的档案名称及额外需被连结的程式库名称;第16行便是一个依存规则,
若是我们在 命令列下只打make,那make便会去寻找makefile中的第一个规则来工
作,在此这便是 第一个规则,但这个规则比较特殊:一、本规则并无「命令」,
二、本规则中的all 并不是档名,而且其後的progs是下一条规则(第18行)的「目
标档」,这样一来,当 我们一去make all时,由於all是由progs所构成,因此会
跳到第18行去,而第18行 的$(PROGS)是cshow,为做本make最终产生的档案,为一
可执行档,第20行的cshow.o 便是最终的目的档,那cshow和cshow.o又是如何产生
的?这和第22、25、28行有关, 这几行是利用下一节的「字尾规则」,稍後再论
。
范例一中第32和35行是makefile中另外常见的规则,其目的不是「产生」目的
档 ,而是去「删除」某些档案,35行的动作包含在32之中,35行的目的是删除可
执行档 (rm -f $(PROGS));而32行会先执行35行的动作,再去删除*.o和*~的档
;若是我 们更新了一大群source的部份时,最好要make clean,否则仍会发生.
o和其source 间版本不同的错误。
字尾规则
通常我们会以特定的字尾来表示不同档案的种类,如.c 便是代表c语言的原始
档 , 而.o 通常代表此档经特定的编译程式所产生的目的档,由於在同一系统中
同一语 言原始档的编译程式皆相同,我们便可为这些原始档定出一定的编译方式
,这便是字 尾规则(Suffix rule)的用意所在,字尾规则通常是在於定义
Makefile的内建依存 规则;字尾规则的语法如下:
.字尾一.字尾二:
命令
其中的意义是字尾一的档案经「命令」的作用後产生字尾二的档案,如范例一
中 的第22和23行:
22 .c.o:
23 $(CC) $(CFLAGS) -c -o $*.o $
44 gcc -MM $(patsubst %.o,%.c,$(PROGS_O)) >>.depend
45
46 include .depend
范例一是笔者的cshow程式的makefile,其中01至05行以#开头作为注解用;
07至 14行是设定变数,其中07-10所设定的是有关编译器及其命令,11至14行则设
定被编 译的档案名称及额外需被连结的程式库名称;第16行便是一个依存规则,
若是我们在 命令列下只打make,那make便会去寻找makefile中的第一个规则来工
作,在此这便是 第一个规则,但这个规则比较特殊:一、本规则并无「命令」,
二、本规则中的all 并不是档名,而且其後的progs是下一条规则(第18行)的「目
标档」,这样一来,当 我们一去make all时,由於all是由progs所构成,因此会
跳到第18行去,而第18行 的$(PROGS)是cshow,为做本make最终产生的档案,为一
可执行档,第20行的cshow.o 便是最终的目的档,那cshow和cshow.o又是如何产生
的?这和第22、25、28行有关, 这几行是利用下一节的「字尾规则」,稍後再论
。
范例一中第32和35行是makefile中另外常见的规则,其目的不是「产生」目的
档 ,而是去「删除」某些档案,35行的动作包含在32之中,35行的目的是删除可
执行档 (rm -f $(PROGS));而32行会先执行35行的动作,再去删除*.o和*~的档
;若是我 们更新了一大群source的部份时,最好要make clean,否则仍会发生.
o和其source 间版本不同的错误。
字尾规则
通常我们会以特定的字尾来表示不同档案的种类,如.c 便是代表c语言的原始
档 , 而.o 通常代表此档经特定的编译程式所产生的目的档,由於在同一系统中
同一语 言原始档的编译程式皆相同,我们便可为这些原始档定出一定的编译方式
,这便是字 尾规则(Suffix rule)的用意所在,字尾规则通常是在於定义
Makefile的内建依存 规则;字尾规则的语法如下:
.字尾一.字尾二:
命令
其中的意义是字尾一的档案经「命令」的作用後产生字尾二的档案,如范例一
中 的第22和23行:
22 .c.o:
23 $(CC) $(CFLAGS) -c -o $*.o $