2013-07-23 114 views
3

我訪問了很多鏈接,包括Peter Miller關於非遞歸make的PDF,但我仍然找不到一個關於如何實現它的簡單示例。非遞歸makefile示例

我已經搜索了好幾個小時,但他們中的許多人似乎過於複雜,很難說出事情的流程。

有人可以展示幾個目錄的例子嗎?我想看看隨着更多目錄的添加,makefile文件如何擴展。

也許這樣的事情:

/src/ 
|->main.cc 

|->dirA/a.cc 
|->dirA/module.mk 

|->dirB/b.cc 
|->dirB/module.mk 

/include/ 
|->main.h 
|->a.h 
|->b.h 

然後有main.o需要a.ob.o被編譯成一個可執行。

感謝您提前提出任何提示和指導!

回答

2

你沒有多說這個系統要做什麼。這裏的原油,但有效的解決方案:

/src目錄/ Makefile文件:

vpath %.h include 

main: main.o 
    $(CXX) $^ -o [email protected] 

%.o: %.cc 
    $(CXX) -c -Iinclude $< -o [email protected]  # not the best way, but maybe the clearest 

include dirA/module.mk 
include dirB/module.mk 

/src/dirA/module.mk:

main: dirA/a.o 

dirA/a.o: a.h 

/src目錄/ DIRB /模塊.mk:

main: dirB/b.o 

dirB/b.o: b.h 

有更多的事情可以做,一旦你有這麼多的工作。

+0

對不起,我已經編輯我的答案。但基本上'main.o'要求將'a.o'和'b.o'編譯成一個可執行文件。但是,據我所知,這看起來很棒:) – Tek

+0

@Tek:你的意思是「鏈接」,而不是「編譯」。我推斷你想要一個可執行文件,並將其稱爲'main'(因爲你沒有指定)。 「主要」規則是這樣做的。 – Beta

+0

呃,是的。對不起,我一直在研究這一整夜,現在是午夜。我現在有點心不在焉。但是,無論如何,你會介意在評論欄中描述「最清晰」還是「最佳」方式?這對你和我和許多其他讀者來說都有幫助。感謝迄今爲止的出色例子! – Tek