青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

makefile

Posted on 2009-06-01 11:12 Prayer 閱讀(248) 評(píng)論(0)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX
一、Makefile里有什么?

Makefile里主要包含了五個(gè)東西:顯式規(guī)則、隱晦規(guī)則、變量定義、文件指示和注釋。

1、顯式規(guī)則。顯式規(guī)則說明了,如何生成一個(gè)或多的的目標(biāo)文件。這是由Makefile的書寫者明顯指出,要生成的文件,文件的依賴文件,生成的命令。

2、隱晦規(guī)則。由于我們的make有自動(dòng)推導(dǎo)的功能,所以隱晦的規(guī)則可以讓我們比較粗糙地簡(jiǎn)略地書寫Makefile,這是由make所支持的。

3、變量的定義。在Makefile中我們要定義一系列的變量,變量一般都是字符串,這個(gè)有點(diǎn)你C語言中的宏,當(dāng)Makefile被執(zhí)行時(shí),其中的變量都會(huì)被擴(kuò)展到相應(yīng)的引用位置上。

4、文件指示。其包括了三個(gè)部分,一個(gè)是在一個(gè)Makefile中引用另一個(gè)Makefile,就像C語言中的include一樣;另一個(gè)是指根據(jù)某些情況指定Makefile中的有效部分,就像C語言中的預(yù)編譯#if一樣;還有就是定義一個(gè)多行的命令。有關(guān)這一部分的內(nèi)容,我會(huì)在后續(xù)的部分中講述。

5、注釋。Makefile中只有行注釋,和UNIX的Shell腳本一樣,其注釋是用“#”字符,這個(gè)就像C/C++中的“//”一樣。如果你要在你的Makefile中使用“#”字符,可以用反斜框進(jìn)行轉(zhuǎn)義,如:“\#”。

最后,還值得一提的是,在Makefile中的命令,必須要以[Tab]鍵開始。


二、Makefile的文件名

默認(rèn)的情況下,make命令會(huì)在當(dāng)前目錄下按順序找尋文件名為“GNUmakefile”、“makefile”、“Makefile”的文件,找到了解釋這個(gè)文件。在這三個(gè)文件名中,最好使用“Makefile”這個(gè)文件名,因?yàn)椋@個(gè)文件名第一個(gè)字符為大寫,這樣有一種顯目的感覺。最好不要用“GNUmakefile”,這個(gè)文件是GNU的make識(shí)別的。有另外一些make只對(duì)全小寫的“makefile”文件名敏感,但是基本上來說,大多數(shù)的make都支持“makefile”和“Makefile”這兩種默認(rèn)文件名。

當(dāng)然,你可以使用別的文件名來書寫Makefile,比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“--file”參數(shù),如:make -f Make.Linux或make --file Make.AIX。


三、引用其它的Makefile

在Makefile使用include關(guān)鍵字可以把別的Makefile包含進(jìn)來,這很像C語言的#include,被包含的文件會(huì)原模原樣的放在當(dāng)前文件的包含位置。include的語法是:

    include <filename>;

    filename可以是當(dāng)前操作系統(tǒng)Shell的文件模式(可以保含路徑和通配符)

在include前面可以有一些空字符,但是絕不能是[Tab]鍵開始。include和<filename>;可以用一個(gè)或多個(gè)空格隔開。舉個(gè)例子,你有這樣幾個(gè)Makefile:a.mk、b.mk、c.mk,還有一個(gè)文件叫foo.make,以及一個(gè)變量$(bar),其包含了e.mk和f.mk,那么,下面的語句:

    include foo.make *.mk $(bar)

    等價(jià)于:

    include foo.make a.mk b.mk c.mk e.mk f.mk

make命令開始時(shí),會(huì)把找尋include所指出的其它Makefile,并把其內(nèi)容安置在當(dāng)前的位置。就好像C/C++的#include指令一樣。如果文件都沒有指定絕對(duì)路徑或是相對(duì)路徑的話,make會(huì)在當(dāng)前目錄下首先尋找,如果當(dāng)前目錄下沒有找到,那么,make還會(huì)在下面的幾個(gè)目錄下找:

    1、如果make執(zhí)行時(shí),有“-I”或“--include-dir”參數(shù),那么make就會(huì)在這個(gè)參數(shù)所指定的目錄下去尋找。
    2、如果目錄<prefix>;/include(一般是:/usr/local/bin或/usr/include)存在的話,make也會(huì)去找。

如果有文件沒有找到的話,make會(huì)生成一條警告信息,但不會(huì)馬上出現(xiàn)致命錯(cuò)誤。它會(huì)繼續(xù)載入其它的文件,一旦完成makefile的讀取,make會(huì)再重試這些沒有找到,或是不能讀取的文件,如果還是不行,make才會(huì)出現(xiàn)一條致命信息。如果你想讓make不理那些無法讀取的文件,而繼續(xù)執(zhí)行,你可以在include前加一個(gè)減號(hào)“-”。如:

    -include <filename>;
    其表示,無論include過程中出現(xiàn)什么錯(cuò)誤,都不要報(bào)錯(cuò)繼續(xù)執(zhí)行。和其它版本make兼容的相關(guān)命令是sinclude,其作用和這一個(gè)是一樣的。


四、環(huán)境變量 MAKEFILES 

如果你的當(dāng)前環(huán)境中定義了環(huán)境變量MAKEFILES,那么,make會(huì)把這個(gè)變量中的值做一個(gè)類似于include的動(dòng)作。這個(gè)變量中的值是其它的Makefile,用空格分隔。只是,它和include不同的是,從這個(gè)環(huán)境變中引入的Makefile的“目標(biāo)”不會(huì)起作用,如果環(huán)境變量中定義的文件發(fā)現(xiàn)錯(cuò)誤,make也會(huì)不理。

但是在這里我還是建議不要使用這個(gè)環(huán)境變量,因?yàn)橹灰@個(gè)變量一被定義,那么當(dāng)你使用make時(shí),所有的Makefile都會(huì)受到它的影響,這絕不是你想看到的。在這里提這個(gè)事,只是為了告訴大家,也許有時(shí)候你的Makefile出現(xiàn)了怪事,那么你可以看看當(dāng)前環(huán)境中有沒有定義這個(gè)變量。


五、make的工作方式

GNU的make工作時(shí)的執(zhí)行步驟入下:(想來其它的make也是類似)

    1、讀入所有的Makefile。
    2、讀入被include的其它Makefile。
    3、初始化文件中的變量。
    4、推導(dǎo)隱晦規(guī)則,并分析所有規(guī)則。
    5、為所有的目標(biāo)文件創(chuàng)建依賴關(guān)系鏈。
    6、根據(jù)依賴關(guān)系,決定哪些目標(biāo)要重新生成。
    7、執(zhí)行生成命令。

1-5步為第一個(gè)階段,6-7為第二個(gè)階段。第一個(gè)階段中,如果定義的變量被使用了,那么,make會(huì)把其展開在使用的位置。但make并不會(huì)完全馬上展開,make使用的是拖延戰(zhàn)術(shù),如果變量出現(xiàn)在依賴關(guān)系的規(guī)則中,那么僅當(dāng)這條依賴被決定要使用了,變量才會(huì)在其內(nèi)部展開。

當(dāng)然,這個(gè)工作方式你不一定要清楚,但是知道這個(gè)方式你也會(huì)對(duì)make更為熟悉。有了這個(gè)基礎(chǔ),后續(xù)部分也就容易看懂了。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清一区二| 亚洲一区二区三区精品在线| 亚洲天天影视| 亚洲深夜影院| 亚洲第一页在线| 亚洲先锋成人| 欧美日本簧片| 日韩午夜剧场| 欧美高清不卡在线| 久久人人97超碰精品888| 国产热re99久久6国产精品| 亚洲午夜精品一区二区三区他趣| 亚洲麻豆国产自偷在线| 欧美激情一区二区三区不卡| 在线视频成人| 欧美大秀在线观看| 老司机免费视频一区二区三区| 国产一区二区三区久久久久久久久 | 亚洲视频日本| 欧美午夜在线观看| 亚洲影视在线播放| 日韩午夜视频在线观看| 欧美另类99xxxxx| 亚洲视频一二三| 亚洲视频网在线直播| 国产欧美日韩综合一区在线观看| 久久精品久久综合| 久久永久免费| 一区二区av| 亚洲视频免费在线观看| 国产亚洲激情视频在线| 欧美凹凸一区二区三区视频| 欧美成人亚洲成人日韩成人| 日韩一二三区视频| 亚洲综合精品一区二区| 精品99一区二区| 亚洲国产日韩在线一区模特| 欧美色另类天堂2015| 欧美诱惑福利视频| 久久一二三区| 亚洲视频专区在线| 欧美在线日韩精品| 亚洲精品乱码久久久久久久久| 99香蕉国产精品偷在线观看| 国产日韩欧美电影在线观看| 欧美高清视频一区二区三区在线观看| 欧美国产三级| 久久久久久噜噜噜久久久精品| 免费成人毛片| 午夜亚洲性色福利视频| 久久噜噜亚洲综合| 亚洲综合999| 久久免费精品日本久久中文字幕| 亚洲精品乱码久久久久久日本蜜臀 | 99精品视频免费全部在线| 久久男人资源视频| 欧美三级电影一区| 久久精品中文字幕一区| 欧美精品自拍| 久久蜜臀精品av| 欧美日韩中字| 欧美成人激情视频| 国产精品国色综合久久| 免费中文字幕日韩欧美| 国产精品久久久久久久久久三级 | 亚洲小说欧美另类社区| 亚洲人成网站777色婷婷| 欧美亚洲综合在线| 亚洲一区免费看| 欧美精品二区| 欧美成人免费在线| 国产精品一二一区| 亚洲乱码一区二区| 亚洲另类视频| 久久成人精品| 性欧美暴力猛交69hd| 欧美久久一区| 亚洲破处大片| 亚洲国产精品99久久久久久久久| 欧美一级在线播放| 性欧美长视频| 国产精品亚洲第一区在线暖暖韩国| 91久久久一线二线三线品牌| 永久免费毛片在线播放不卡| 西瓜成人精品人成网站| 午夜精品成人在线| 欧美午夜三级| 99精品国产高清一区二区| 亚洲黄色毛片| 久久欧美中文字幕| 免费成人小视频| 在线观看日韩欧美| 久久亚洲午夜电影| 鲁大师成人一区二区三区| 经典三级久久| 麻豆国产精品777777在线| 欧美成人免费在线| 91久久精品国产91久久性色| 欧美好骚综合网| 亚洲人久久久| 亚洲午夜电影在线观看| 欧美午夜不卡在线观看免费| 日韩一级在线观看| 亚洲欧美日韩国产综合| 欧美日韩在线观看一区二区三区| 亚洲精一区二区三区| 亚洲免费影视| 国内精品美女在线观看| 久久久亚洲国产天美传媒修理工 | 老司机免费视频一区二区三区| 好吊成人免视频| 噜噜噜91成人网| 亚洲国产欧美一区| 中文无字幕一区二区三区| 欧美深夜影院| 欧美在线免费观看亚洲| 欧美成人午夜77777| 亚洲精选国产| 国产精品久久久久av| 老鸭窝毛片一区二区三区| 欧美sm视频| 亚洲伦理在线| 午夜精品国产| 激情久久久久久久| 欧美日韩国产精品一区| 亚洲图片欧美日产| 久久综合久色欧美综合狠狠| 亚洲国产日本| 国产精品久久久久9999| 久久久噜噜噜久久中文字幕色伊伊| 亚洲国产日韩欧美| 亚洲在线中文字幕| 激情综合色丁香一区二区| 欧美激情自拍| 欧美一区二区三区视频免费播放| 欧美大胆人体视频| 亚洲视频电影图片偷拍一区| 国产欧美一级| 欧美精品久久一区二区| 午夜精品久久久久久久白皮肤 | 99国产精品| 老司机成人在线视频| 亚洲欧美清纯在线制服| 亚洲国产精品久久久| 欧美视频免费在线| 久久综合久色欧美综合狠狠| 亚洲亚洲精品三区日韩精品在线视频| 免费欧美网站| 午夜精品婷婷| 亚洲午夜高清视频| 亚洲精品美女91| 狠狠入ady亚洲精品| 国产精品日韩专区| 欧美精品在线观看| 久久夜色精品| 久久深夜福利| 久久激情五月丁香伊人| 亚洲一本视频| 日韩一级在线观看| 亚洲人午夜精品| 欧美成人精品一区二区三区| 欧美在线观看视频一区二区三区| 一区二区动漫| 亚洲欧洲一区二区三区久久| 国语自产精品视频在线看| 国产精品美女久久久久久2018| 欧美精品免费看| 欧美成人综合一区| 久久久久国内| 欧美诱惑福利视频| 久久国产精品久久精品国产| 亚洲一区黄色| 亚洲专区一区| 亚洲欧美国产高清va在线播| 一本色道婷婷久久欧美| 一本到12不卡视频在线dvd| 亚洲精品乱码久久久久久日本蜜臀 | 欧美精品成人一区二区在线观看| 久久久www成人免费无遮挡大片| 午夜欧美理论片| 欧美一区二区私人影院日本| 久久成人免费网| 久久久999| 久久精品官网| 麻豆久久久9性大片| 欧美成人三级在线| 亚洲欧美在线看| 亚洲一区二区三区在线观看视频| 亚洲人成网站精品片在线观看| 亚洲二区视频在线| 91久久综合亚洲鲁鲁五月天| 亚洲国产一成人久久精品| 亚洲美女91| 亚洲免费中文字幕| 久久er99精品| 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美成人一区二区在线电影 | 欧美成人一区二区三区在线观看| 欧美成人免费全部| 亚洲人成久久|