30天自制操作系统
上QQ阅读APP看书,第一时间看更新

2 整理Makefile(harib03b)

分割虽然成功了,但现在Makefile又有点长了,足足有113行。虽说出现这种情况是情有可原,但是,像这样:

bootpack.gas : bootpack.c Makefile
    $(CC1) -o bootpack.gas bootpack.c

graphic.gas : graphic.c Makefile
    $(CC1) -o graphic.gas graphic.c

dsctbl.gas : dsctbl.c Makefile
    $(CC1) -o dsctbl.gas dsctbl.c

或者像这样:

bootpack.nas : bootpack.gas Makefile
    $(GAS2NASK) bootpack.gas bootpack.nas

graphic.nas : graphic.gas Makefile
    $(GAS2NASK) graphic.gas graphic.nas

dsctbl.nas : dsctbl.gas Makefile
    $(GAS2NASK) dsctbl.gas dsctbl.nas

它们做的都是同样的事。为什么要写这么多同样的东西呢?每次增加新的源文件,都要像这样增加这么多雷同的编译规则,看着都烦。

■■■■■

其实有一个技巧可以将它们归纳起来,这就是利用一般规则。我们可以把上面6个独立的文件生成规则,归纳成以下两个一般规则。

%.gas : %.c Makefile
    $(CC1) -o $*.gas $*.c

%.nas : %.gas Makefile
    $(GAS2NASK) $*.gas $*.nas

哦,这玩意儿好!真方便。

make.exe会首先寻找普通的生成规则,如果没找到,就尝试用一般规则。所以,即使一般规则和普通生成规则有冲突,也不会有问题。这时候,普通生成规则的优先级更高。比如虽然某个文件的扩展名也是.c,但是想用单独的规则来编译它,这也没问题。真聪明呀。

所以,Makefile中可以用一般规则的地方我们都换成了一般规则。这样程序就精简成了92行。减了21行呢,感觉太棒了。

我们来确认一下,运行“make run”。很好,完全能正常运行。