Makefile

執行make時候會自動在當前目錄順序搜尋GNUMakefile、makefile、Makefile、。

Make命令:
         Make [參數] [宏] [目標 目標 ……]
         通常從第一條規則開始維護。檢查順序:第一個依賴文件——第一個依賴文件的依賴文件……    ——>第二個依賴文件——第二個依賴文件的依賴文件……   ……    樹狀一條路徑逐層展開,直查找到依賴文件都是源文件,而後原路返回,查找下一條路徑。同一規則的依賴文件按照從左至右順序。

參數:
         -c dir 指定make工做後的工做目錄
         -e 不容許makefile中給環境宏賦值
         -f filename 或--file filename 指定一個或順序指定多個makefile文件
         -i 忽略makefile中命令執行是產生的錯誤,不停止make
         -k 執行命令出錯,放棄當前目標文件,轉向其餘目標
         -n 或--just-print按實際執行是順序顯示命令,包括@開頭的,但不實際執行 
         -p 顯示makefile中全部宏定義和內部規則
         -r 忽略內部規則
         -s 執行,但不顯示執行的命令
         -S 執行makefile命令菜單時出錯即退出makefile
         -t 或--touch修改每一個目標文件的建立日期,但不真正從新建立目標文件
         -V 顯示make版本號
         -x 把全部宏輸出到環境

Make的基本規則:
         Target  [屬性] 分隔符 [依賴文件] [;命令行 ]
           {Tab 命令行}
         注:命令行間能夠加入任意多個空行,但空行也要以tab開頭。Cat –v-t-e Makefile會使Makefile文件中tab以^]顯示,行尾以$顯示。
         注:命令過長,用\來鏈接多行成一行。註釋以#開頭,若是#要用做字符符號,「#」。

分隔符:
         ::目標有多個規則。哪條規則中的依賴文件比目標新,執行哪條規則。若是多條規則的依賴文件都比目標新,多條規則都執行。因爲後面的規則可能覆蓋前面規則的執行結構,因此規則順序不一樣,執行結構也不一樣。
         :^把本規則依賴文件和目標文件已有的依賴文件合起來,生成目標新的依賴文件列表。
         :-清除目標已有依賴文件,把本規則依賴文件做爲目標依賴文件列表。
         :!對每一個更新過的依賴文件都執行一次命令菜單。 ???
         :|內部規則專用。 ???
如:file.o :file.c
         file.o :^ filef.c 現依賴文件爲file.c filef.c
         file.o :- filef.c 現依賴文件爲 filef.c

命令行屬性:
-          若本命令的執行錯誤,忽略掉,繼續向下執行。(不加該標誌,make會中止)
+   始終執行本命令,即便make參數使用了-n-q-t。(前提是本規則中依賴文件新與目標文件,命令行須要執行)
@  本命令行不在標準輸出顯示。

Target屬性:
         指定多個目標文件屬性: 屬性 屬性 …… :目標 目標 ……
         規則中指定單個目標屬性:目標 屬性:[依賴文件] ……
         ·IGNORE 相似與命令行屬性-
         ·SILENT 相似與命令行屬性@
         ·PRECIOUS 保留中間文件
         ·LIBRARY 目標是一個庫。若是make發現目標是lib(member)或lib((entry))形式,會自動給名爲lib的目標加上該屬性。
         ·LIBRARYM 目標是庫的一個成員。若是make發現目標是lib(member)形式,會自動給lib目標加上·LIBRARY,被member目標加上·LIBRARYM。本屬性不可在makefile文件顯式聲明。
         ·SYMBOL 目標是指定入口的庫成員。Make會自動給lib((entry))的目標和依賴文件加上本屬性。本屬性不可在makefile文件顯式聲明。

命令行屬性、目標屬性、make參數都是用來控制make的,當三者屬性發生矛盾時候,規則遵循的屬性優先順序爲:命令行屬性——目標屬性——make參數,但三者都未指定,則用默認。

僞目標:
         Linux提供的內部僞目標:
         ·ERROR :
                   Make遇到錯誤,執行該目標規則。
·INCLUDE :file1 ……
         包含其餘makefile文件,其餘makefile文件位於·INCLUDE規則的依賴文件位置。實際上,是把包含的文件內容copy到當前位置。好比:包含一個宏定義文件,以便在當前位置展開,本makefile文件能夠用這些宏。形式:
                            ·INCLUDE :filename1 filename2……  
或要包含的文件不在當前文件夾
                            ·INCLUDE :路徑1 路徑2 ……
                            ·INCLUDE :filename1 filename2 …… 
或者
                            ·INCLUDE :路徑/filename> ……
·IMPORT :宏 ……
         使用環境變量中的宏。
         ·IMPORT :·ENVERTHING 可使用環境中全部宏了。
·EXPORT :宏 ……
         將宏及當前值輸入環境變量中。
·SETDIR=路徑
         改變當前工做路徑。

注:有時候要定義的僞目標可能與文件名重。好比存在clean這個文件。能夠用:
         PHONY:clean
         cean:
                   …………
         PHONY的做用是確保下面的clean是僞目標,非文件,從而避免混亂。命令行

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息