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

四、嵌套執行make

在一些大的工程中,我們會把我們不同模塊或是不同功能的源文件放在不同的目錄中,我們可以在每個目錄中都書寫一個該目錄的Makefile,這有利于讓我們的Makefile變得更加地簡潔,而不至于把所有的東西全部寫在一個Makefile中,這樣會很難維護我們的Makefile,這個技術對于我們模塊編譯和分段編譯有著非常大的好處。

例如,我們有一個子目錄叫subdir,這個目錄下有個Makefile文件,來指明了這個目錄下文件的編譯規則。那么我們總控的Makefile可以這樣書寫:

    subsystem:
            cd subdir && $(MAKE)

其等價于:

    subsystem:
            $(MAKE) -C subdir

定義$(MAKE)宏變量的意思是,也許我們的make需要一些參數,所以定義成一個變量比較利于維護。這兩個例子的意思都是先進入“subdir”目錄,然后執行make命令。

我們把這個Makefile叫做“總控Makefile”,總控Makefile的變量可以傳遞到下級的Makefile中(如果你顯示的聲明),但是不會覆蓋下層的Makefile中所定義的變量,除非指定了“-e”參數。

如果你要傳遞變量到下級Makefile中,那么你可以使用這樣的聲明:

    export <variable ...>;

如果你不想讓某些變量傳遞到下級Makefile中,那么你可以這樣聲明: 

    unexport <variable ...>;

如:
    
    示例一:

        export variable = value

        其等價于:

        variable = value
        export variable

        其等價于:

        export variable := value

        其等價于:

        variable := value
        export variable

    示例二:

        export variable += value

        其等價于:

        variable += value
        export variable

如果你要傳遞所有的變量,那么,只要一個export就行了。后面什么也不用跟,表示傳遞所有的變量。

需要注意的是,有兩個變量,一個是SHELL,一個是MAKEFLAGS,這兩個變量不管你是否export,其總是要傳遞到下層Makefile中,特別是MAKEFILES變量,其中包含了make的參數信息,如果我們執行“總控Makefile”時有make參數或是在上層Makefile中定義了這個變量,那么MAKEFILES變量將會是這些參數,并會傳遞到下層Makefile中,這是一個系統級的環境變量。

但是make命令中的有幾個參數并不往下傳遞,它們是“-C”,“-f”,“-h”“-o”和“-W”(有關Makefile參數的細節將在后面說明),如果你不想往下層傳遞參數,那么,你可以這樣來:

    subsystem:
            cd subdir && $(MAKE) MAKEFLAGS=

如果你定義了環境變量MAKEFLAGS,那么你得確信其中的選項是大家都會用到的,如果其中有“-t”,“-n”,和“-q”參數,那么將會有讓你意想不到的結果,或許會讓你異常地恐慌。

還有一個在“嵌套執行”中比較有用的參數,“-w”或是“--print-directory”會在make的過程中輸出一些信息,讓你看到目前的工作目錄。比如,如果我們的下級make目錄是“/home/hchen/gnu/make”,如果我們使用“make -w”來執行,那么當進入該目錄時,我們會看到:

    make: Entering directory `/home/hchen/gnu/make'.

而在完成下層make后離開目錄時,我們會看到:

    make: Leaving directory `/home/hchen/gnu/make'

當你使用“-C”參數來指定make下層Makefile時,“-w”會被自動打開的。如果參數中有“-s”(“--slient”)或是“--no-print-directory”,那么,“-w”總是失效的。

五、定義命令包

如果Makefile中出現一些相同命令序列,那么我們可以為這些相同的命令序列定義一個變量。定義這種命令序列的語法以“define”開始,以“endef”結束,如:

    define run-yacc
    yacc $(firstword $^)
    mv y.tab.c $@
    endef

這里,“run-yacc”是這個命令包的名字,其不要和Makefile中的變量重名。在“define”和“endef”中的兩行就是命令序列。這個命令包中的第一個命令是運行Yacc程序,因為Yacc程序總是生成“y.tab.c”的文件,所以第二行的命令就是把這個文件改改名字。還是把這個命令包放到一個示例中來看看吧。

    foo.c : foo.y
            $(run-yacc)

我們可以看見,要使用這個命令包,我們就好像使用變量一樣。在這個命令包的使用中,命令包“run-yacc”中的“$^”就是“foo.y”,“$@”就是“foo.c”(有關這種以“$”開頭的特殊變量,我們會在后面介紹),make在執行命令包時,命令包中的每個命令會被依次獨立執行。
Posted on 2007-04-17 11:03 艾凡赫 閱讀(3788) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美日韩精品久久亚洲区| 亚洲美女黄色| 久久嫩草精品久久久久| 中文有码久久| 亚洲欧美国产va在线影院| 正在播放日韩| 国内一区二区在线视频观看| 亚洲欧美日韩在线一区| 久久福利一区| 久久夜色精品| 欧美激情在线观看| 日韩视频亚洲视频| 亚洲免费在线电影| 久久亚洲精品网站| 欧美视频日韩视频| 国产亚洲精品v| 红桃视频国产精品| 亚洲免费av片| 亚洲欧美激情视频| 久久久亚洲国产天美传媒修理工| 看欧美日韩国产| 欧美激情中文字幕乱码免费| 91久久精品日日躁夜夜躁欧美| 亚洲国产精品视频| 一区二区三区欧美在线| 欧美一级片在线播放| 欧美aa在线视频| 国产精品欧美久久| 精品91在线| 亚洲午夜女主播在线直播| 欧美日韩精品在线| 国产亚洲a∨片在线观看| 亚洲专区一二三| 欧美亚洲综合久久| 猫咪成人在线观看| 99精品国产在热久久| 久久精品国产一区二区三| 欧美成人高清| 国产私拍一区| 亚洲天堂av电影| 免费成人在线视频网站| 日韩网站免费观看| 久久久久久久一区二区| 国产精品进线69影院| 亚洲肉体裸体xxxx137| 久久精品国产77777蜜臀| 亚洲精品一区二区三区四区高清 | 欧美激情综合网| 国产日韩欧美一区| 亚洲一区激情| 亚洲精品女av网站| 亚洲欧美日韩精品一区二区 | 美女任你摸久久| 午夜在线一区二区| 国产精品色婷婷| 亚洲一二三级电影| 亚洲理论在线| 久久一区二区三区四区五区| 欧美一区二区在线| 欧美日韩一区在线播放| 亚洲高清在线精品| 欧美gay视频激情| 久久久精品一区二区三区| 国产欧美精品xxxx另类| 新67194成人永久网站| 99精品国产高清一区二区| 欧美激情综合色| 一区二区三区成人精品| 亚洲精品日本| 欧美日韩美女在线观看| 日韩一级大片在线| 亚洲精品国精品久久99热| 欧美高清在线观看| 一区二区三区精品久久久| 99精品欧美| 国产精品视频yy9099| 久久高清国产| 久久久av毛片精品| 亚洲欧洲三级电影| 91久久国产自产拍夜夜嗨| 欧美成人精品三级在线观看| 亚洲国产小视频| 亚洲美女尤物影院| 国产精品国产三级国产普通话蜜臀 | 欧美a级一区二区| 亚洲精品永久免费精品| 亚洲人成在线播放| 国产精品久久久一本精品| 欧美在线影院| 久久综合网络一区二区| av成人动漫| 亚洲欧美日本另类| 亚洲福利视频在线| 中日韩视频在线观看| 韩国av一区| 日韩视频亚洲视频| 激情小说另类小说亚洲欧美 | 亚洲欧美日韩国产综合| 亚洲高清一区二| 一区二区三区四区蜜桃| 伊人久久av导航| 日韩视频免费观看高清完整版| 国产精品嫩草影院av蜜臀| 免费的成人av| 国产精品wwwwww| 亚洲国产片色| 亚洲影院免费| 99热精品在线观看| 欧美一区国产一区| 中文国产成人精品| 久久亚洲一区二区三区四区| 亚洲男同1069视频| 香蕉av福利精品导航| 狼人天天伊人久久| 亚洲私人黄色宅男| 亚洲福利精品| 午夜在线视频一区二区区别| 亚洲精品视频在线播放| 欧美综合国产| 亚洲欧美激情在线视频| 久久婷婷蜜乳一本欲蜜臀| 亚洲女爱视频在线| 欧美成人精品一区二区| 久久这里只有| 国产欧美日韩中文字幕在线| 亚洲精品综合久久中文字幕| 亚洲大胆在线| 久久精品综合一区| 久久精品一区| 国产精品中文字幕在线观看| 亚洲乱码国产乱码精品精天堂| 亚洲大胆人体在线| 久久精品人人做人人综合| 久久成人精品一区二区三区| 国产精品国色综合久久| a91a精品视频在线观看| 夜夜嗨av一区二区三区四区| 欧美a级片网站| 亚洲国产高清aⅴ视频| 在线观看国产精品淫| 久久国产精品免费一区| 久久精品五月婷婷| 国产日韩精品一区观看| 亚洲男人天堂2024| 先锋影音久久| 欧美日韩亚洲一区二区三区在线| 亚洲国产精品va在线看黑人动漫| 亚洲大胆人体在线| 欧美成人免费在线视频| 亚洲精品国久久99热| 中文国产成人精品久久一| 国产精品激情电影| 性色一区二区三区| 免费欧美视频| 亚洲日本欧美天堂| 欧美日韩亚洲视频| 亚洲午夜激情| 久久人人97超碰国产公开结果| 黄色精品一区| 欧美精品成人| 亚洲一区二区三区四区在线观看 | 136国产福利精品导航网址应用| 久久久亚洲国产天美传媒修理工| 免费试看一区| 亚洲免费观看高清完整版在线观看熊 | 亚洲日韩视频| 欧美三区在线观看| 亚洲欧美中文日韩v在线观看| 久久精彩免费视频| 亚洲人体影院| 国产精品一区在线观看你懂的| 欧美一级专区免费大片| 亚洲成色www8888| 亚洲在线免费| 国产精品青草久久| 亚洲免费视频成人| 久久精品一区四区| 亚洲国产日韩欧美一区二区三区| 欧美成人久久| 亚洲免费在线播放| 亚洲国产成人av在线| 午夜精品一区二区三区四区| 国产亚洲综合性久久久影院| 欧美电影打屁股sp| 午夜精品久久久久久| 亚洲国产精品一区| 欧美综合第一页| 亚洲乱码视频| 精品白丝av| 国产嫩草影院久久久久| 欧美日韩成人综合天天影院| 久久久精品国产免费观看同学| 一本大道久久a久久精二百| 免费不卡在线观看| 欧美伊人久久久久久午夜久久久久 | 亚洲午夜激情网站| 亚洲欧洲精品成人久久奇米网| 久久久久久久久岛国免费| 亚洲欧美日韩在线播放| 亚洲高清色综合|