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

Prayer

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

makefile

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

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

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

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

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

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

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

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


二、Makefile的文件名

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

當(dāng)然,你可以使用別的文件名來(lái)書(shū)寫(xiě)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)來(lái),這很像C語(yǔ)言的#include,被包含的文件會(huì)原模原樣的放在當(dāng)前文件的包含位置。include的語(yǔ)法是:

    include <filename>;

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

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

    include foo.make *.mk $(bar)

    等價(jià)于:

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

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

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

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

    -include <filename>;
    其表示,無(wú)論include過(guò)程中出現(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è)類(lèi)似于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)境中有沒(méi)有定義這個(gè)變量。


五、make的工作方式

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

    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í)行生成命令。

1-5步為第一個(gè)階段,6-7為第二個(gè)階段。第一個(gè)階段中,如果定義的變量被使用了,那么,make會(huì)把其展開(kāi)在使用的位置。但make并不會(huì)完全馬上展開(kāi),make使用的是拖延戰(zhàn)術(shù),如果變量出現(xiàn)在依賴(lài)關(guān)系的規(guī)則中,那么僅當(dāng)這條依賴(lài)被決定要使用了,變量才會(huì)在其內(nèi)部展開(kā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>
            亚洲午夜在线观看视频在线| 欧美在线看片a免费观看| 亚洲砖区区免费| 亚洲网站啪啪| 欧美亚洲在线视频| 久久久久国产精品一区| 久久夜色精品一区| 亚洲丰满少妇videoshd| 亚洲成色777777女色窝| 日韩午夜精品视频| 亚洲欧美日本另类| 久久人91精品久久久久久不卡| 六月丁香综合| 欧美日韩一区二区三区在线 | 亚洲经典自拍| 日韩视频―中文字幕| 亚洲天堂男人| 老司机久久99久久精品播放免费 | 午夜久久久久| 乱码第一页成人| 亚洲日本电影| 久久成人人人人精品欧| 欧美伦理91i| 国产乱码精品一区二区三区不卡 | 免费永久网站黄欧美| 亚洲欧洲日夜超级视频| 香蕉久久a毛片| 欧美日韩国产在线一区| 国内在线观看一区二区三区| 亚洲伦理网站| 久久乐国产精品| 一区二区三区国产精品| 久久天堂成人| 国产欧美日韩麻豆91| 日韩小视频在线观看专区| 亚洲欧美日韩一区二区三区在线观看 | 欧美成人一区二区在线| 亚洲视频成人| 欧美日韩国产大片| 91久久久久久久久久久久久| 午夜天堂精品久久久久 | av成人免费在线| 久久综合色婷婷| 国产日韩欧美精品在线| 亚洲一二三四久久| 91久久久久| 老司机久久99久久精品播放免费| 国产精品私房写真福利视频| 91久久久久久久久| 久久免费99精品久久久久久| 制服丝袜亚洲播放| 欧美日韩国产在线观看| 夜夜精品视频| 亚洲国产欧美国产综合一区| 久久综合伊人| 亚洲日本欧美日韩高观看| 欧美激情精品久久久久久大尺度| 久久av最新网址| 海角社区69精品视频| 性久久久久久久| 亚洲欧美日韩在线| 国产一区二区成人| 久久亚洲综合色| 开心色5月久久精品| 激情成人av| 蜜臀91精品一区二区三区| 久久精品青青大伊人av| 一色屋精品视频免费看| 久久综合狠狠综合久久综青草 | 久久久国产一区二区三区| 激情欧美日韩| 亚洲福利视频专区| 欧美激情影音先锋| 亚洲午夜精品一区二区三区他趣| 亚洲免费电影在线观看| 国产精品免费福利| 欧美一区二区三区四区夜夜大片| 亚洲在线免费观看| 伊人久久久大香线蕉综合直播 | 欧美一区二区三区啪啪| 亚洲一区精品在线| 国产午夜精品一区二区三区视频| 久久九九国产精品怡红院| 久久精品国产欧美激情| 亚洲精品一区二区在线| 宅男噜噜噜66国产日韩在线观看| 国产精品亚洲一区二区三区在线| 久久久99国产精品免费| 欧美成人国产va精品日本一级| 欧美成人免费在线视频| av不卡在线看| 性欧美大战久久久久久久久| 精品动漫3d一区二区三区免费| 亚洲国产成人精品久久久国产成人一区 | 亚洲国产成人一区| 国产精品女人网站| 欧美14一18处毛片| 欧美午夜精品理论片a级按摩| 久久久久久久久久久久久女国产乱| 美女黄毛**国产精品啪啪| 亚洲一区免费| 久久综合久久综合久久| 欧美夜福利tv在线| 欧美精品一区在线发布| 久久精品国产欧美激情| 欧美日韩国产一级片| 久久亚裔精品欧美| 国产精品大片| 久久伊人亚洲| 国产精品一卡| 亚洲国产精品尤物yw在线观看| 欧美香蕉大胸在线视频观看| 欧美激情精品久久久久久黑人| 国产午夜一区二区三区| 99热这里只有精品8| 亚洲黄页视频免费观看| 欧美在线你懂的| 欧美一区二区三区四区夜夜大片 | 亚洲精品在线一区二区| 亚洲大胆在线| 久久蜜桃精品| 久久中文字幕导航| 国产深夜精品| 亚洲影视在线播放| 亚洲自拍都市欧美小说| 欧美日韩国产综合网| 亚洲国产一二三| 亚洲精品乱码久久久久| 免费观看不卡av| 久久综合久久久| 国产日韩欧美制服另类| 亚洲一卡二卡三卡四卡五卡| 中文在线资源观看网站视频免费不卡| 欧美激情一区二区| 91久久久久久久久| 中文亚洲免费| 国产精品视频| 性一交一乱一区二区洋洋av| 久久国产夜色精品鲁鲁99| 国产一区二区毛片| 久久久久高清| 亚洲大胆人体在线| 亚洲精品久久久久久下一站| 欧美 日韩 国产精品免费观看| 欧美激情综合| 在线亚洲欧美视频| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲午夜一二三区视频| 久久国产精品亚洲va麻豆| 国内精品一区二区三区| 久久国产加勒比精品无码| 免费看成人av| 亚洲深夜福利网站| 国产精品亚洲аv天堂网| 久久成人羞羞网站| 亚洲福利久久| 午夜视频在线观看一区二区| 狠狠色狠狠色综合日日91app| 久久久久久亚洲精品不卡4k岛国| 蜜桃久久av| 亚洲一区二区三区高清 | 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 在线日韩av永久免费观看| 欧美凹凸一区二区三区视频| 日韩西西人体444www| 久久福利影视| 亚洲激情av| 国产精品久久久久婷婷| 久久久一区二区三区| 日韩亚洲精品电影| 久久久久成人精品| 日韩午夜高潮| 国产亚洲欧洲一区高清在线观看| 久久久久免费| 一本久久知道综合久久| 麻豆精品网站| 亚洲一区二区三区欧美| 精品av久久707| 欧美日韩视频不卡| 久久久久久久999精品视频| 亚洲精品影院| 狂野欧美激情性xxxx欧美| 亚洲视频一二| 亚洲高清色综合| 国产九九精品视频| 欧美日韩免费精品| 久久永久免费| 亚洲欧美日韩成人| 一区二区三区国产精品| 亚洲电影自拍| 久久综合电影| 久久精品国产久精国产思思| 亚洲一区视频| 亚洲天堂男人| 99人久久精品视频最新地址| 伊人久久久大香线蕉综合直播| 国产日本亚洲高清| 国产精品久久久久久久久搜平片 | 欧美激情按摩| 久久久久久久综合|