2010-03-25 95 views

回答

79

構建,就像Makefile所理解的那樣,由許多目標組成。例如,建立一個項目,你可能需要

  1. 構建file1.o出file1.c中的
  2. 構建file2.o出file2.c中的
  3. 構建file3.o出file3.c中
  4. 構建executable1出file1.o和file3.o
  5. 構建executable2,如果你實現了這個工作流程的makefile file2.o

,你可以把每個目標separatel的年。例如,如果你寫了

make file1.o 

它只會建立該文件,如有必要。

all的名稱不固定。這只是一個傳統的名字; all target表示如果你調用它,make將會生成全部需要什麼來製作完整版本。這通常是一個虛擬目標,它不會創建任何文件,而僅僅依賴於其他文件。對於上面的示例,建設所有必要的是構建可執行文件,其他文件作爲依賴項被引入。所以在makefile它看起來像這樣:

all: executable1 executable2 

all目標通常是makefile文件的第一,因爲如果你只是寫在命令行make,沒有指定目標,將建立的第一個目標。你期望它是all

all通常也是.PHONY的目標。瞭解更多here

2

不確定它代表什麼特別。這只是一個慣例,你提供了一個「全部」規則,通常它用來列出構建整個項目所需的所有子目標,因此名稱爲「全部」。唯一特別的地方是人們經常會把它作爲makefile中的第一個目標,這意味着僅僅輸入'make'就會和'make all'做同樣的事情。

1

目標「all」是虛擬目標的示例 - 磁盤上沒有任何名爲「all」的東西。這意味着當你做一個「全部製造」時,make始終認爲它需要構建它,並且執行該目標的所有命令。這些命令通常是構建makefile知道的所有最終產品的命令,但它可以執行任何操作。

虛擬目標的其他例子是「乾淨」和「安裝」,它們以相同的方式工作。

如果你還沒有讀過它,你應該閱讀GNU Make Manual,這也是一個很好的教程。

+0

別忘了Mr.Proper(順便說一下mrproper)和distclean ... – t0mm13b 2010-03-25 11:31:22

18

GNU Make手冊爲alllist of standard targets提供了明確的定義。

如果Makefile文件的作者是繼該公約那麼目標應該all

  1. 編譯整個程序,但不建立文檔。
  2. 成爲默認目標。如剛剛運行make應該和make all一樣。

爲了實現1 all通常被定義爲一個.PHONY目標取決於構成整個程序的可執行文件(或多個):

.PHONY : all 
all : executable 

爲了實現2 all要麼是在限定的第一目標make文件或將其分配爲默認目標:

.DEFAULT_GOAL := all