我寫的程序的一個要求是它必須能夠信任配置文件。爲了達到這個目的,我使用了幾種哈希算法來在編譯時生成文件的哈希值,這會產生一個哈希值爲常量的頭文件。GNU Make - 非程序代碼的依賴關係
這個的依賴性非常直接,我的程序依賴於config_hash.h,它有一個產生它的目標。
的makefile文件看起來是這樣的:
config_hash.h:
$(SH) genhash config/config_file.cfg > $(srcdir)/config_hash.h
$(PROGRAM): config_hash.h $(PROGRAM_DEPS)
$(CC) ... ... ...
我使用-M選項的gcc,這是偉大的處理依賴。如果我的標題改變了,我的程序就會重建。
我的問題是,我需要能夠判斷配置文件是否已經更改,以便重新生成config_hash.h。我不太清楚如何向GNU make解釋這種依賴。
我試過列舉config/config_file.cfg作爲config_hash.h的依賴項,並且爲config_file.cfg提供了一個.PHONY
目標,但沒有成功。顯然,我不能依靠-M開關來gcc來幫助我,因爲配置文件不是任何目標代碼的一部分。
有什麼建議嗎?不幸的是,我不能發佈很多Makefile文件,或者我只是發佈了所有的東西。
您是否嘗試過運行「make -d」?你會得到很多的輸出(有可能會減少輸出,但仍然足夠的變種-d,請參閱make --help),但將config_hash.h列表config_file.cfg作爲依賴項應該有效。我的猜測是目標名稱沒有正確匹配:您的目標可能需要爲$(srcdir)/config_hash.h,具體取決於config/config_file.cfg,例如... make -d應該明顯。 (另外,檢查gcc -M生成的.d文件也可能會對某些事情有所幫助。) – leander 2010-05-23 02:07:03