依賴在項目中,我有:與Makefile文件,源發電機工作,產生與海灣合作委員會
main.cpp
template.sth
- 更
對於每個.cpp
文件我生成.o
文件。 感謝,我可以寫所有.o
目標簡單規則(簡單,一點點pseudcode版本更加清晰):
OBJS = #list of all .o files needed
%.o: %.cpp
g++ -MM -MF %.d -MP -MT %.o %.cpp
g++ -c -o %.o %.cpp
話,我,包括所有現有.d
文件,所以每一代人之後,我爽快的依賴。
它的工作除非我有template.sth
。該文件包含一些用於生成h
文件和cpp
文件的模板。
當一個文件,即main.cpp
包括從template.sth
生成的文件(可以說gen.h
):
- 指令產生
.d
文件不起作用,因爲gen.h
丟失:fatal error: gen.h: No such file or directory
include "gen.h"
- 即使這些說明會起作用,這與我的「工作流程」有關。直到現在我可以生成
.d
文件進行下一次製作。它的工作原理是,因爲添加新的依賴關係需要更改當前依賴項之一。因此,在添加一個.o
之後正在重建,並且生成了新的.d
。現在我需要在製作.o
之前檢測到,我需要從template.sth
生成gen.h
。
有沒有辦法自動做到這一點?問題1可以解決,如果有一些方法可以告訴g++
,如果某些.h
文件丟失,只需將其添加到依賴項即可。 解決問題1.執行使多次(我三思而後行總是不夠),內置項目結束後(第一make
會產生依賴文件,那麼第二make
看到的是main.cpp
取決於gen.h
,gen.h
失蹤,有指導如何創建gen.h
,以便在構建main.o
之前創建gen.h
)。
如果不能自動完成,怎麼解決?我可以在Makefile
指令中編寫指令,這些指令將在任何其他版本之前構建所有生成的文件,或者我需要在所有.o
指令中手動添加此生成的文件作爲依賴關係?
UPDATE:
一些改動後,與-MG
標誌g++
甚至gen.h
生成正確的文件。我現在可以用兩個make
命令來構建我的項目。 第一個將創建正確的.d
文件並中斷,因爲缺少gen.h
。 第二個將有.d
文件準備好,所以它會在構建main.o
之前生成gen.h
,所以建築main.o
將會成功。
是否有辦法生成.d
文件然後在生成.o
之前使用它?
我有這個。問題是main.o和gen.h之間的Makefile沒有依賴關係。 – Ari 2014-09-25 18:00:55
@Ari你正在尋找一種自動方式將'gen.h'添加到'main.o'的依賴列表中是否正確?請注意,目標文件依賴於它們包含的所有頭文件,所以像'main.o→gen.h'這樣的依賴關係應該在你的Makefile文件中生成'gen.h'文件。 – 2014-09-25 18:35:54
@MichaelGrünewald是的,就像我添加未生成的依賴關係一樣。 – Ari 2014-09-25 18:38:12