官术网_书友最值得收藏!

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”。很好,完全能正常運行。

主站蜘蛛池模板: 祁阳县| 平果县| 垫江县| 日土县| 土默特左旗| 商洛市| 长兴县| 昆明市| 巩留县| 广宗县| 温州市| 古蔺县| 台中县| 晋中市| 浏阳市| 夹江县| 拉萨市| 富蕴县| 通海县| 贡觉县| 东方市| 张家川| 合阳县| 冕宁县| 通山县| 绥宁县| 吉林市| 朝阳市| 绥化市| 河西区| 博乐市| 禄丰县| 浦北县| 张家界市| 武城县| 平潭县| 阳朔县| 如东县| 民丰县| 虞城县| 富阳市|