2013-12-10 38 views
0

我有如下的生成文件:的makefile如何發現這個目標

elf: $(OUTDIR)/$(TARGET).elf 
lss: $(OUTDIR)/$(TARGET).lss 
sym: $(OUTDIR)/$(TARGET).sym 
hex: $(OUTDIR)/$(TARGET).hex 
bin: $(OUTDIR)/$(TARGET).bin 

至於我的理解,elf:是目標,並且依賴於文件$(OUTDIR)/$(TARGET).elf。如果這個(.elf)文件不是最新的,那麼我該怎麼辦,因爲我沒有看到要執行的命令?對於lss,sym等也是如此。謝謝。

Kamesh

回答

0

你接近,也許一些額外的相關信息的幫助:

  • elf:只是一個的許多目標。當沒有特定目標時調用make選擇它在Makefile中遇到的第一個目標定義。
  • $(OUTDIR)/$(TARGET).elf確實是目標的依賴關係。它不一定是一個文件,它也可以是這個或另一個Makefile中的另一個目標。它只是需要定義。在這種情況下,輔助目標可能會定義構建的規則,從而導致操作...
  • make有一個內置規則集,適用於沒有爲給定目標實施規則的情況。這就是爲什麼沒有建立規則的目標確實有意義並且可能觸發行動的原因之一。
  • 可能會在Makefile中定義額外的「默認規則」。
  • 通常這樣的「虛擬目標」只能定義爲能夠發出簡單而乾淨的make命令。他們的目的只是通過他們的依賴來觸發輔助目標。

一般來說,使用詳細模式make來查看所採取操作的樹是個不錯的主意。此外,在尋找更詳細的信息時,您應該查看關於「make」主題的「信息頁」:info make在任何decend unixoid系統上(如果安裝了信息頁)。

+0

如果依賴$(OUTDIR)/ $(TARGET)。小精靈是另一個目標,它可以像%.elf這樣的通配符: – user3085906

+0

它肯定可以使用通配符,儘管我目前對語法不太確定(自從我廣泛地寫Makefiles之後已經有幾年了)。如上所述:請查閱優秀的文檔。 – arkascha

0

您沒有提供整個Makefile,因此無法絕對確定地回答。但是,從經驗來看,您顯示的線條的含義如下。

elf是一個「虛假」目標 - 這意味着,它不是作爲真實文件的名稱,而是作爲真實文件集合的縮寫,或者是具有更長名稱的真實文件的縮寫。

「規定」

elf: $(OUTDIR)/$(TARGET).elf 

手段,make elf,第一次更新$(OUTDIR)/$(TARGET).elf。之後,這條規則就沒有其他內容了,所以沒有什麼可做的了。

這樣,您的假elf目標,相當於文件$(OUTDIR)/$(TARGET).elf。該文件可能在makefile的其他地方有另一個規則,說明如何製作它。

同樣爲您的其他假目標。

>make elf 

只會更新文件$(OUTDIR)/$(TARGET