主页 /
引用请注明出处
GCC系统生成程序Makefile的结构分析
玛瑞 1996/1
1 系统生成程序M akefile命令行参数的定义 (2)
2 系统生成程序M akefile的工作流程 (4)数学故事六年级
2.1 A. all.internal (4)
2.1.1 宏定义 (4)
2.1.2 执行目标a ll (转向执行a ll.internal) (5)
2.1.3 检察配置状态 (5)
2.1.4 预处理程序的生成(cpp) (5)
美白防晒霜2.1.5 c编译子系统的生成(cc1) (5)
2.1.6 链接程序的生成(ld) (6)
2.1.7 驱动程序的生成(xgcc) (6)
2.1.8 spec文件的生成 (6)
2.1.9 libgcc1.a的生成 (6)
2.1.10 生成x limit.h (7)
2.1.11 c++驱动程序的生成(g++) (7)
2.1.12 头文件的获得 (7)
2.1.13 执行f ixproto (9)
2.1.14 目标a ll(all.internal)结束 (9)
2.1.15 退出m ake (9)
2.2 B. install (9)
2.2.1 宏定义 (9)
2.2.2 执行目标i nstall (10)元旦是几号
2.2.3 安装生成的系统文件 (10)
2.2.4 安装头文件 (11)
2.2.5 安装库文件 (11)
2.2.6 安装帮助手册 (12)
2.2.7 安装系统信息手册 (12)
2.2.8 目标i nstall结束 (12)
2.2.9 退出m ake (12)
1系统生成程序Makefile命令行参数的定义
1. 限制语言的安装:
"LANGUAGES=c c++ Objective-c proto的子集"
其中,proto是生成程序protoize和unprotoize的目标名。protoize支持ANSI函数原型格式的说明。20用英语怎么说
注: 在xgcc生成之前,只有c的说明有效。
2. 重定义编译程序
"CC=编译程序名 CFLAGS=使用此编译程序所带的参数表"
缺省的CC是本机配带的cc编译程序,其CFLAGS为" -g "
3. 目标名
GCC的提供以下外部目标名:
1> all : 是第一个目标名,故当make命令行不指明目标时,系统分析从
all开始。all的执行动作取决于configure文件是否在Makefile.in
中插入了文件${srcdir}/cross-make的内容。若是交叉编译,此文
件被插入,则all实际执行目标ss;否则,all实际执行目标
all.internal。所以,ss是交叉编译的驱动目标名,all.internal
是一般系统生成的驱动目标名(它们是内部目标名)。
2> doc : 生成系统信息手册
保罗克鲁格曼
3> proto : 生成程序protoize,unprotoize
4> install : 安装已生成的GCC编译系统到适当的目录下
陈永5> install-cross : (未定义,需安装者自己设计各步)
6> install-cross-rest : 在目标系统上完成安装交叉编译系统的后期工作
7> uninstall : 将被安装的文件删除
8> TAGS : 更新c-par.c , objc-par.c , cexp.c的内容
(执行etags使*.y和*.h重新生成*.c)
9> mostlyclean : 删除由编译生成的大多数文件;
不删除libgcc.a及其组成
10> clean : 删除由编译生成的所有文件(及目录)
11> distclean : 删除由安装生成的所有文件(及目录)
12> realclean : 删除可以自动(由别的程序)生成的所有文件(及目录)
(这四级删除是后一级包含前一级)
[13|14|15|16]> stage[1234] : 将安装阶段[1234]生成的目标文件(*.o)拷贝到
子目录stage[1234]下(各语言子目录下
的*.o拷贝到stage[1234]相应的子目录
下)
2系统生成程序Makefile的工作流程
限于篇幅,以下只分析目标 : all.internal和install
假设在mips-sgi-irix5.2上安装 :
2.1 A. all.internal
假设已做过distclean,并执行过configure; 命令行为 :
" sgi% make LANGUAGES=c"
2.1.1宏定义
(略)
2.1.2执行目标all (转向执行all.internal)
2.1.3检察配置状态
若config.status不存在,则错误退出
2.1.4预处理程序的生成(cpp)
生成cppp.o , cexp.o , version.o , cpp-->cppp
注 : 大多数的" *.c-->*.o"由以下命令完成 :
计算机一共几级" cc -c -DIN_GCC -g -I. -I. -I./config c源文件名"
2.1.5c编译子系统的生成(cc1)
1. 生成C_OBJS,它们是特定于c的目标文件,包括 :
c-par.o c-lang.o c-lex.o c-pragma.o c-decl.o
关于友谊的歌c-typeck.o c-convert.o c-aux-info.o c-common.o
c-iterate.o
2. 生成OBJS,它们是各种语言的公共目标文件,包括 :
toplev.o version.o tree.o print-tree.o stor-layout.o fold-const.o function.o stmt.o expr.o calls.o expmed.o explow.o optabs.o varasm.o
rtl.o print-rtl.o rtlanal.o emit.o real.o dbxout.o sdbout.o dwarfout.o
xcoffout.o integrate.o jump.o c.o loop.o unroll.o flow.o stupid.o
combine.o regclass.o local-alloc.o global.o reload.o reload1.o caller-
save.o insn-peep.o reorg.o
sched.o final.o recog.o reg-stack.o insn-opinit.o insn-recog.o insn-
extract.o insn-output.o insn-emit.o insn-attrtabs.o aux-output.o getpwd.o
convert.o