2015-07-20 45 views
0

我是比較新的makefile和我必須寫一個makefile的一個大項目編譯與GNU gcc編譯器項目。如何在makefile中組織大量頭包含路徑?

爲源文件中的相關頭文件在不同的子目錄這樣的組織:

D:\MyProject\SubProject1\Modules\APP\StateManager\Include 
D:\MyProject\Tools\ 
D:\MyProject\Common\Public 
D:\MyProject\Function\Modules\FSW\Public 
D:\MyProject\SubProject1\Modules\Version\Include 
D:\MyProject\SubProject1\Modules\APP\AC\Include 
D:\MyProject\SubProject1\Modules\APP\DBDTmanager\Public 
D:\MyProject\SubProject1\Modules\APP\Diag\Include\ 
D:\MyProject\SubProject1\Modules\APP\FunTTT\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Adc\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Func2\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Stubs\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\DTC\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Generated\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Generated_BSM\Include 
D:\MyProject\SubProject1\Modules\Basis_SW\Functions\Include 
D:\MyProject\SubProject1\Modules\BistTests\Include 
D:\MyProject\SubProject1\Modules\BistTests\Include\WatchDog\Include 
D:\MyProject\App\ssw\common\Public 
D:\MyProject\Bit\Modules\Timer\Include 

任何想法如何定義包括在Makefile在「明確」和「overseeable」的方式?

Thx對於任何建議!

+0

這些都最終需要作爲'-I'標誌添加到'gcc'調用中嗎? –

+0

是的,沒錯。當我想用gcc命令編譯一個源文件時是一樣的,例如:gcc source.c -I [INCLUDE_PATH1] -I [INCLUDE_PATH2] ...... – JohnDoe

回答

0

使用此

INC=-I<header-path-1> -I<header-path-2> -I<header-path3> 

PS:他們都用空格

+0

好的,但是我有大約40條路徑:) so在這種方式下,它將是一個非常長的路線,並且不是很好監督...... – JohnDoe

+0

1)使用INC:= ...所以每次使用宏時不重新評估宏。 2)將每個路徑在單獨一行,結束每一行,除了最後,用「\」 – user3629249

+0

如果變量的值不包含本身的任何變量引用我不相信做重新擴展它(如果這樣做,可能相當便宜),但這可能值得在某個時候進行測試。 –

1

假設你沒有任何其他的要求在這裏分隔,只是想獲得所有這些條目到一個相當乾淨的方式你CFLAGS值,你可以做這樣的事情:

PROJDIR := D:\MyProject 
SUBPROJDIR := $(PROJDIR)\SubProject1\Modules 

CFLAGS += -I$(PROJDIR)\SubProject1\Modules\APP\StateManager\Include 
CFLAGS += -I$(PROJDIR)\Tools\ 
CFLAGS += -I$(PROJDIR)\Common\Public 
CFLAGS += -I$(PROJDIR)\Function\Modules\FSW\Public 
CFLAGS += -I$(SUBPROJDIR)\Version\Include 
CFLAGS += -I$(SUBPROJDIR)\APP\AC\Include 
CFLAGS += -I$(SUBPROJDIR)\APP\DBDTmanager\Public 
CFLAGS += -I$(SUBPROJDIR)\APP\Diag\Include\ 
CFLAGS += -I$(SUBPROJDIR)\APP\FunTTT\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Adc\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Func2\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Stubs\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\DTC\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Generated\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Generated_BSM\Include 
CFLAGS += -I$(SUBPROJDIR)\Basis_SW\Functions\Include 
CFLAGS += -I$(SUBPROJDIR)\BistTests\Include 
CFLAGS += -I$(SUBPROJDIR)\BistTests\Include\WatchDog\Include 
CFLAGS += -I$(PROJDIR)\App\ssw\common\Public 
CFLAGS += -I$(PROJDIR)\Bit\Modules\Timer\Include 

+0

Thx!這是正確的... – JohnDoe

+0

嗨,我已經完全這樣做,但我得到的消息:「gcc.exe錯誤:CFLAGS:沒有這樣的文件或目錄」和「+ =:沒有這樣的文件或目錄」.. .. 任何想法?在gnu的文檔中,我發現了與你所顯示的相同的語法? – JohnDoe

+0

你把這些線條放在哪裏?他們不會參與制作文件主體中目標的配方(任何目標之外)。 –