《跟我一起写Makefile》读书笔记(2)
四、Makefile綜述
1、makefile里有什么?
Makefile 里主要包含五個(gè)東西:顯式規(guī)則、隱晦規(guī)則、變量定義、文件指示和注釋。
(1)在 Makefile 中我們要定義一系列的變量,變量一般都是字符串;這個(gè)有點(diǎn)像C語(yǔ)言中的宏,當(dāng) Makefile 被執(zhí)行時(shí),其中的變量都會(huì)被擴(kuò)展到相應(yīng)的引用位置上。
(2)文件指示,包括三個(gè)部分
- 一個(gè)是在一個(gè) Makefile 中引用另一個(gè) Makefile,就像 C 語(yǔ)言中的include 一樣;
- 另一個(gè)是指根據(jù)某些情況指定 Makefile 中的有效部分,就像 C 語(yǔ)言中的預(yù)編譯#if 一樣;
- 還有就是定義一個(gè)多行的命令。?
- Makefile 中只有行注釋,和 UNIX 的 Shell 腳本一樣,其注釋是用“#”字符。
- 如果要使用“#”字符,可以用反斜框進(jìn)行轉(zhuǎn)義,如:“\#”。
2、makefile的文件名
(1)默認(rèn)的情況下,make 命令會(huì)在當(dāng)前目錄下按順序找尋文件名為“GNUmakefile”、“makefile”、“Makefile”的文件;
(2)大多數(shù)的 make 都支持“makefile”和“Makefile”這兩種默認(rèn)文件名;
(3)可以使用別的文件名來(lái)書(shū)寫(xiě) Makefile,比如 : “ Make.Linux” ,“Make.Solaris”,“Make.AIX”等。
- 如果要指定特定的 Makefile,你可以使用 make 的“-f”和“--file”參數(shù),如:make -f Make.Linux 或 make --file Make.AIX。
3、引用其他Makefile文件
(1)例子如:(這里可以有空字符)include ?foo.make ?*.mk ? $(bar)?
(2)細(xì)節(jié)注意
- 被包含的文件會(huì)原模原樣的放在當(dāng)前文件的包含位置;
- 在 include前面可以有一些空字符,但是絕不能是[Tab]鍵開(kāi)始;
- include和文件之間,可以用一個(gè)或多個(gè)空格隔開(kāi)。
4、環(huán)境變量MAKEFILES
(1)如果你的當(dāng)前環(huán)境中定義了環(huán)境變量 MAKEFILES,那么,make 會(huì)把這個(gè)變量中的值做一個(gè)類(lèi)似于 include 的動(dòng)作。
(2)它和 include不同的是,從這個(gè)環(huán)境變中引入的 Makefile 的“目標(biāo)”不會(huì)起作用,如果環(huán)境變量中定義的文件發(fā)現(xiàn)錯(cuò)誤,make 也會(huì)不理。
(3)這個(gè)變量中的值是其它的 Makefile,用空格分隔。
(4)建議不要使用這個(gè)環(huán)境變量,因?yàn)橹灰@個(gè)變量一被定義,那么當(dāng)你使用 make 時(shí), 所有的 Makefile 都會(huì)受到它的影響。
5、Makefile的工作方式
(1)讀入所有的 Makefile;
(2)讀入被 include 的其它 Makefile;
(3)初始化文件中的變量;
(4)推導(dǎo)隱晦規(guī)則,并分析所有規(guī)則;
(5)為所有的目標(biāo)文件創(chuàng)建依賴(lài)關(guān)系鏈;
(6)根據(jù)依賴(lài)關(guān)系,決定哪些目標(biāo)要重新生成;
(7)執(zhí)行生成命令。
總結(jié)
以上是生活随笔為你收集整理的《跟我一起写Makefile》读书笔记(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 共轭梯度法粗浅理解
- 下一篇: 将ascii码转换成汉字