2011-04-04 40 views
2

在以下(減少)make文件中,依賴關係位於底部。這是我寫的一個實際的make文件的一部分。在真實情況下,頭文件依賴於另一個頭文件。使文件依賴節,需要有x.h:y.h?

我還沒有找到答案在其他地方,所以......我需要在依賴關係底部包含一行以「swap.h:other.h」的效果?

SRC =  swap.c other.c etc 
OBJ =  swap.o other.o etc 
EXE =  swap 

$(EXE): $(OBJ) 
     $(CC) $(CFLAGS) -o $(EXE) $(OBJ) -lm 

## Dependencies 

swap.o: swap.h other.h 
other.o: other.h 

謝謝!

+0

.h文件不會被編譯。你打算通過將標題作爲目標來實現什麼目標? – vpit3833 2011-04-04 07:05:30

回答

7

由於swap.h沒有任何關係,如果other.h發生變化,即使第一個#include是秒,簡短答案是否定的。

...但是,如果某些C源代碼包含swap.h並且swap.h包含other.h,則其他.h中的更改將影響需要從所述C源生成的對象。

但是,通常情況下,您不希望手動維護標頭依賴項。這是費力和容易出錯的。

有幾種自動生成這些依賴關係的方法。

我可以推薦Advanced Auto-Dependency Generation紙。這種方法並不完美,但它可以像使用Makefiles一樣好。

+0

所以..如果我手動維護它(小項目),那麼技術上我應該包括它。 – commentator8 2011-04-04 07:17:35

+0

如果你想說''依賴關係'(而不是'swap.h:other.h'位),那麼答案是 - 是的。你應該總是問自己:如果這個文件改變了還有什麼需要改變?那麼對此非常明確,所以'make'也會知道。 – 2011-04-04 07:28:55

+0

1.「影響」,而不是「效果」。 2.許多Makefile生成器爲你處理依賴計算(automake和CMake對於某些人來說可能是其他人)。 – 2011-04-04 11:28:21

0

這裏有一種方法,以頭文件之間的定義依賴:

swap.h: other.h 
    touch [email protected] 

如果other.h被修改,這取決於swap.h任何目標將得到更新。