2011-09-09 32 views
1

我有一個非常簡單的makefile,基本上執行以下操作:預編譯的頭文件是在每個make上創建的?

# Pre-compiled header 
CORE_PCH_FILENAME =Core.h 

CORE_PCH: 
     $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 

#Objects 
obj/%.o: CORE_PCH %.cpp obj/%.d 
     @mkdir -p obj 
     $(CXX) $(CXX_CFLAGS) -c $*.cpp -o [email protected] 

#Dependencies 
obj/%.d: %.cpp 
     @mkdir -p obj 
     $(CXX) $(CXX_CFLAGS) -MM -MT obj/$*.o -MF [email protected] $< 

我的問題是,我第一次做時,Core.h.gch被創建和獲取項目建成。沒關係。

但是,即使沒有改變,再次運行make會重新創建Core.h.gch並重新編譯所有內容。

如果我沒有預編譯的頭,使精的行爲(如果一切都沒有改變也不會重建任何東西,如果重新進行修改,只取得了什麼是必要的)

但我真的很想有預編譯頭文件,有沒有我不正確的做法!?

編輯:

以下建議:

# Pre-compiled header 
$(CORE_PCH_FILENAME) =Core.h 
CORE_PCH: $(CORE_PCH_FILENAME) 
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 

但它仍然被創建每次:(

回答

4

問題是,您沒有按名稱引用gch,字面上沒有名爲CORE_PCH的文件。 嘗試:

CORE_PCH_FILENAME=Core.h 
CORE_PCH=$(CORE_PCH_FILENAME).gch 

$(CORE_PCH): 
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 
+0

這樣的作品,非常感謝你;) – zedxz

2

CORE_PCH是在先決條件OBJ /%Ø ,並且它本身沒有先決條件,所以它總是被構建出來的,如果你將Core.h添加到CORE_PCH的先決條件中,那就應該考慮它了。

+0

嗯,試了一下(見我的編輯),但可惜.. – zedxz