2014-06-27 107 views
1

是否有任何本機makefile(GNU make等)方式來獲取目標先決條件的先決條件?這些問題是不是關於通過編譯器從源文件進行依賴性檢查(例如,g ++ -MM)。Makefile:獲取目標先決條件的先決條件

在主題上找不到任何東西。正如我所看到的,這種情況沒有特別的變數。

爲了說明問題,下面是我從C++源代碼編譯配方的定義,對象,非常標準雖然:

##### UNIVERSAL COMPILE ##### 
%.o: %.cpp %.hpp 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

然後我需要建立的依賴非常大的連鎖店:

a: a.o 
b: b.o a.o 
c: c.o b.o a.o 
d: d.o c.o b.o a.o 
etc, up to N times... 

這是必要的,因爲這種鏈接配方:

##### UNIVERSAL LINK ##### 
%: %.o 
    ${LN} ${LNFLAGS} $^ -o [email protected] 

正如你ç一看,配方需要所有供應依賴的,但需要得到所有供應依賴的依賴關係。

沒有與總體規劃的連接沒有問題,因爲它是食譜:

##### PROGRAM LINK ###### 
${BIN}: ${OBJ} 
    ${LN} ${LNFLAGS} ${OBJ} -o ${BINDIR}/[email protected] 

但我需要做單元測試,和單位取決於一個每個人的依賴性和測試的層次結構子系統是非常累人寫作硬編碼的依賴鏈。

也許我這樣做的方式不對?也許有這個鏈接配方的替代品?謝謝!

+0

你是什麼意思「...的目標先決條件」?我得到了「目標的先決條件」的意思,但不是「獲取目標先決條件的先決條件」。 – Adrian

回答

1

你這樣做是錯誤的。爲什麼要聲明b.o必須重新編譯每次a.o更改(這是(指定先決條件pf b.o : a.o)時的含義)?這不是需要發生的事情,也沒有意義。

你需要列出所有目標文件爲一個可執行文件的先決條件,例如:

exe: a.o b.o c.o d.o ... 

就是這樣。

+0

對不起,我寫的不是這個意思,改變了問題,特別是反映鏈接配方的依賴鏈。 – Anthony

+0

我想他可能會問的是我現在希望做的事情可以做一點,那就是支持在目標體中獲得先決條件的先決條件的一種方式(其他一些自動化變量或其他)。我需要這個來創建「源」文件的tarball,並偶爾一起構建/消除結果文件。 –

+0

@EtanReisner但他沒有列出'b.o:b.o a.o';他說'b:b.o a.o'。那是不同的,對吧? – Adrian