c/c++研究和学习

lcc源码学习(2)

首先从makefile看起。上次BUILD lcc时一共使用过5次nmake命令。

nmake -f makefile.nt TEMPDIR=\\temp HOSTFILE=etc/win32.c lcc

nmake -f makefile.nt all

nmake -f makefile.nt test

nmake -f makefile.nt triple

nmake -f makefile.nt clean

前两次是编译生成目标文件,接着两次是测试生成文件的正确性,最后一次是清理生成过程中产生的中间文件。

那接着来看看makefile.nt里面的内容。

关于生成文件内容可以参考MSDN,这里我们主要关心BUILD需要使用的文件,和这些文件间的依赖关系。

all:: rcc lburg cpp lcc bprint liblcc

rcc: $Brcc$E
lburg: $Blburg$E
cpp: $Bcpp$E
lcc: $Blcc$E
bprint: $Bbprint$E
liblcc: $Bliblcc$A

这里看出主要就是生成 rcc.exe lburg.exe cpp.exe lcc.exe bprint.exe liblcc.exe 这几个文件。当然,我们最关心的是lcc.exe了。那再看看lcc.exe的依赖关系。

$Blcc$E: $Blcc$O $Bhost$O; $(LD) $(LDFLAGS) -Fe$@ $Blcc$O $Bhost$O

$Blcc$O: etc/lcc.c; $(CC) $(CFLAGS) -c -DTEMPDIR=\"$(TEMPDIR)\" -Fo$@ etc/lcc.c
$Bhost$O: $(HOSTFILE); $(CC) $(CFLAGS) -c -Fo$@ $(HOSTFILE)
实际上就是lcc.c和win32.c。好了,从这里开始,其他部分等学习到的时候再说。

-----------------------------

注1:nmake 命令格式:NMAKE [option...] [macros...] [targets...] [@commandfile...]

注2:-f选项:格式:-F filename      filename 指定为生成文件。

注3:生成文件包含:

  • 描述块

  • 命令

  • 推理规则

  • 点指令

  • 预处理指令

注4:生成文件中可以使用[*,?]通配符,将按依赖扩展。命令中的通配符不扩展,直接传送给命令

注5:生成文件中特殊字符:  : ; # ( ) $ ^ \ { } ! @ —

注6:预定义命令宏

产品 命令宏 定义为 选项宏
宏汇编 AS ml AFLAGS
C编译器 CC cl CFLAGS
C++编译器 CPP cl CPPFLAGS
C++编译器 CXX cl CXXFLAGS
资源编译器 RC rc RFLAGS

注4:一些宏变量定义:B=$(BUILDDIR)^\     E=.exe   CC=cl -nologo    LD=cl -nologo    CFLAGS=-DWIN32 -Zi -MLd -Fd$(BUILDDIR)^\     LDFLAGS=-Zi -MLd -Fd$(BUILDDIR)^\

          HOSTFILE 是命令行定义的,我们用的是etc/win32.c

posted on 2008-10-27 20:45 昆仑大鹏 阅读(1152) 评论(0)  编辑 收藏 引用 所属分类: lcc 源码学习


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理