GNU make手冊翻譯系列(1)

前言

本系列翻譯參考網上廣傳的<<GNU make中文手冊>>,之所以要再次翻譯一遍原因有二:

        原有翻譯基於V3.8版本的GNU make,跟手頭版本V4.2已經存在不少差異;

        通過翻譯深入理解GNU make

另,翻譯未按照手冊章節順序進行,不保證全部章節翻譯,翻譯內容儘量不添加個人觀點.


4 規則書寫

        Makefile中的規則描述了何時以及如何重建特定的文件,這類特定的文件就被稱爲規則的目標(通常一條規則只有一個目標).規則中除了目標之外,還包含了目標的依賴文件,以及如果創建或更新該目標的配方.

       除了makefile的默認目標”所在的規則,其他規則的書寫順序並不重要.默認目標就是當沒有使用make命令行指定具體目標時,make默認的更新的那個目標.默認目標是Makefile中書寫的第一條規則中的目標.如果第一條規則中包含了多個目標,那麼只有其中的第一個目標將被作爲默認目標.這裏存在兩種例外情況:一種是目標名以點號“.”開始的並且其後不存在斜線“/”;另一種是模式規則中的目標.滿足這兩種情況之一的目標都不會被作爲默認目標.

        因此,通常情況下,我們在Makefile中書寫的第一條規則就應該是編譯整個程序或多個程序的最終描述(通常將這條規則的目標名寫爲"all").


4.1 規則語法

通常,一條規則的語法格式如下:

                目標列表 : 依賴列表

                        配方

                        ...

或者:

                目標列表 : 依賴列表;配方

                        配方

                        ...

        "目標列表"通常是空格分開的多個文件名 .文件名除了可以使用通配符之外,格式"a(m)"表示檔案文件a中的成員m.通常一條規則只包含一個目標,但偶爾情況下也會包含多個目標.

        獨立一行書寫"配方",必須以一個tab字符開始(或者是由.RECIPEPREFIX變量指定的字符).第一條"配方"可以寫在"依賴列表"後面並用分號";"隔開,並且多條配方也可以寫在同一行,同樣使用分號";"隔開即可.這些書寫格式的效果都是一樣的.

        由於Makefile中使用"$"符號來引用變量,所以如果你想要在目標或依賴中單純的使用"$"符號,需要寫兩個"$$".如果是在已經使能了二次展開功能的情況下,需要使用四個"$$$$"來達到同樣的目的.

        你可以使用反斜線"\"將一個較長的行分割成多個獨立行,儘管這不是必須的,因爲make程序對Makefile中一行的長度沒有做限制.

一條規則告訴了make程序兩件事:一件是目標何時過期;另一件是當需要時如何去更新目標.

        目標是否過期的標準是由那些使用空格分割的"依賴列表"所決定的(通配符和檔案文件成員在這裏也同樣適用).如果目標不存在或者它比"依賴列表"中的一些成員老(通過比較最後修改時間),則判定該目標過期.目標文件的內容是基於"依賴列表"的信息生成的,所以如果"依賴列表"中有成員發生變化,那麼已經存在的目標文件必然不再有效.

        更新目標的方法是由"配方"指定的,"配方"也就是一行或多行shell命令以及一些附加功能.


                
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章