通用makefile是如何煉成的(VI)

今天我們嘗試引入多模塊,這次很有必要的。模塊化開發嘛

既然是多模塊,首先應該引入模塊的概念,module.mk. 直接將main.mk中的內容移動到module.mk即可

# main.mk

## 約定俗成,大家已經習慣性的總是將all默認的make終極目標。
## 在這個例子中,就是生成hello.exe 
.PHONY : all clean
all:

## 調用哪個模塊mk,就編譯哪個模塊。
## 也可以同時將多個模塊導入
include module.mk

爲了體現多模塊,我們將hello.h, hello.cpp 移動到hello文件夾。注意同時修改module.mk中的源文件列表,(加上hello路徑)



順利成章地,我們在hello文件夾中也加入module.mk, 然後在main.mk中將該module.mk也include進來。事情看上去是如此直接簡單,但一句話總是在這種時候冒出來:想象是如此美好,現實卻是如此殘酷。

編譯時就會發現一堆錯誤,主要是有這麼幾個問題

1.  提示編譯目標clean重定義。

      這個原因是makefile允許目標的依賴關係多次定義,但是實現目標的命令只能在一個規則處定義。當我們include多個module.mk時,顯然clean目標被重複定義了

2.  有些變量的值有些莫名其妙了,特別是OBJS, DEPS,等,

      這是因爲makefile的執行規則是做兩次掃描。第一次確認具體的規則,第二次才執行規則。這就是說,當include第一個module.mk之後,make不會馬上開始執行規則中的命令,而是繼續include第二個module.mk。 這樣一來,先前定義的變量就會被重新覆蓋,造成變量值莫名其妙。

3.  


這是一次失敗的嘗試,不過嘛,我們也從中分析出了失敗原因,就等着讓失敗做母親吧


作爲最後,我決定把所有源代碼移動到src目錄。工程目錄結構看上去更好看一點





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章