??Makefile 里主要包含了五個東西:① 顯式規則、② 隱晦規則、③ 變量定義、④ 文件指示、⑤ 注釋。
1、顯式規則??顯式規則說明了如何生成一個或多個目標文件。由 Makefile 的書寫者顯式地指出:要生成的文件、文件的依賴文件、生成的命令。
2、隱晦規則??由于我們的 make 有自動推導的功能,所以隱晦規則可以讓我們比較粗糙地、簡略地書寫 Makefile,這是由 make 所支持的。
3、變量定義??在 Makefile 中我們要定義一系列的變量,變量一般都是字符串,這個有點像 c 語言中的宏,當 Makefile 被執行時,其中的變量都會被擴展到相應的引用位置上。
4、文件指示??其中包括了三個部分:① 在一個 Makefile 中引用另一個 Makefile,就像 c 語言中的 include 一樣;② 根據某些情況指定 Makefile 中的有效部分,就像 c 語言中的預編譯#if
一樣;③ 定義一個多行的命令。有關文件指示的內容,我會在后續的部分中講述。
??Makefile 中只有行注釋,和 Unix 的 shell 腳本一樣,其注釋是用 “#” 字符,這個就像 c/c++ 中的 “//” 一樣。如果你要在你的 Makefile 中使用 “#” 字符,可以用反斜杠進行轉義,如\#
。最后,值得一提的是,在 Makefile 中的命令,必須要以以 [Tab] 鍵開始。
??默認情況下,make 命令會在當前目錄下按順序尋找文件名為 “GNUmakefile”、“makefile”、“Makefile” 的文件,找到了就解釋這個文件。在這三個文件名中,最好使用 “Makefile” 這個文件名,因為這個文件名第一個字符為大寫,這樣有一種醒目的感覺。最好不要用 “GNUmakefile”,這個文件名是 GNU 的 make 識別的。有另外一些 make 只對全小寫的 “makefile” 文件名敏感,但基本上來說,大多數的 make 都支持 “makefile” 和 “Makefile” 這兩種默認文件名。
??當然,你可以使用別的文件名來書寫 Makefile,比如 “Make.Linux”、“Make.Solaris”、“Make.AIX” 等,如果要指定特定的 Makefile,你可以使用 make 的 “-f” 或 “–file” 參數,如make -f Make.Linux
或make --file Make.AIX
。
??在 Makefile 中使用 include 關鍵字可以把別的 Makefile 包含進來,這很像 c 語言的 #include,被包含的文件會原模原樣地放在當前文件的包含位置。include 的語法是:
include
fileName 可以是當前操作系統 shell 的文件模式(可以包含路徑和通配符)。在 include 前面可以有一些空字符,但是絕對不能是 [Tab] 鍵開始。include 和
include foo.make *.mk $(bar)
等價于:
include foo.make a.mk b.mk c.mk e.mk f.mk
??make 命令開始時,會找尋 include 所指出的其它 Makefile,并把其內容安置在當前位置。就好像 c/c++ 的 #include 指令一樣。如果文件都沒有指定絕對路徑或是相對路徑的話,make 會首先在當前目錄下尋找,如果當前目錄下沒有找到,那么 make 還會在下面幾個目錄下找:
-I
或--include-dir
參數,那么 make 就會在這個參數所指定的目錄下去尋找。-
。如-include
,其表示,無論 include 過程中出現什么錯誤,都不要報錯,繼續執行。和其它版本 make 兼容的相關命令是 sinclude,起作用和這一個 include 是一樣的。??如果你的當前環境中定義了環境變量 MAKEFILES,那么 make 會把這個變量中的值做一個類似于 include 的動作。這個變量中的值是其它的 Makefile,用空格分隔。只是,它和 include 不同的是,從這個環境變量中引入的 Makefile 的 “目標”不會起作用,如果環境變量中定義的文件發現錯誤,make 也會不理。
??但是在這里我還是建議不要使用這個環境變量,因為只要這個變量一被定義,那么當你使用 make 時,所有的 Makefile都會受到它的影響,這絕不是你想看到的。在這里提這個事,只是為了告訴大家,也許有時候你的 Makefile 出現了怪事,那么你可以看看當前環境中有沒有定義這個變量。
??GNU 的 make 工作時的執行步驟如下(想來其它的 make 也是類似):
1 ~ 5 步為第一個階段,6、7 為第二個階段。第一階段中,如果定義的變量被使用了,那么,make 會把其展開在使用的位置。但 make 并不會完全馬上展開,make 使用的是拖延戰術,如果變量出現在依賴關系的規則中,那么僅當這條依賴被決定要使用了,變量才會在其內部展開。
??當然,這個工作方式你不一定要清楚,但是知道這個方式你也會對 make 更為熟悉。有了這個基礎,后續部分也就容易看懂了。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章名稱:第二部分Makefile總述-創新互聯
分享路徑:http://m.newbst.com/article2/cepgic.html
成都網站建設公司_創新互聯,為您提供網站建設、品牌網站設計、Google、ChatGPT、域名注冊、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯