<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    下面是定義變量的一般方法:
      VARNAME=some_text [...]
    把變量用括號起來,并在前面加上"$"符號,就可以引用變量的值:
      $(VARNAME)
    變量一般都在makefile的頭部定義,并且,按照慣例,所有的makefile變量都應該大寫.

    在makefile中使用變量
    OBJS = howdy.o helper.o
    HDRS = helper.h
    howdy: $(OBJS) $(HDRS)
        gcc $(OBJS) -o howdy
    helper.o: helper.c $(HDRS)
        gcc -c helper.c
    howdy.o: howdy.c
        gcc -c howdy.c
    hello: hello.c
        gcc hello.c -o hello
    all: howdy hello
    clean:
        rm howdy hello *.o

    make使用兩種變量:遞歸展開變量和簡單展開變量.遞歸展開變量在引用時逐層展開,即如果在展開式中包含了對其他變量的引用,則這些變量也將被展開,直到沒有需要展開的變量為止,這就是所謂的遞歸展開.

    考慮下面的變量定義:
      CC = gcc
      CC = $(CC) -o
    CC在被引用時遞歸展開,從而陷入一個無限循環中:CC將展開為$(CC)的值,從而永遠也讀不到-o選項.

    為了避免這個問題,可以使用簡單展開變量.與遞歸展開變量在引用時展開不同,簡單展開變量在定義處展開,并且只展開一次,從而取消了變量的嵌套引用.在定義時,其語法與遞歸展開變量有細微的不同:
      CC := gcc -o
      CC += -O2
    第一個定義使用":="設置CC的值為gcc -o, 第二個定義使用"+="在前面定義的CC后附加了-O2,從而CC最終的值是gcc -o -O2.

    除用戶定義變量外,make也允許使用環境變量,自動變量和預定義變量.使用環境變量非常簡單.在啟動時,make讀取已定義的環境變量,并且創建與之同名同值的變量.但是,如果makefile中有同名的變量,則這個變量將取代與之相應的環境變量,所以應當注意這一點.

                                    自動變量
    變量                          說明
    $@                            規則的目標所對應的文件名
    $<                            規則中的第一個相關文件名
    $^                            規則中所有相關文件的列表,以空格為分界符
    $?                            規則中日期新于目標的所有相關文件的列表,以空格為分隔符
    $(@D)                       目標文件的目錄部分(如果目標在子目錄中)
    $(@F)                       目標文件的文件名部分(如果目標在子目錄中)

                      用于文件名和標志的預定義變量
    變量                     說明
    AR                       歸檔維護程序,默認值=ar
    AS                       匯編程序,默認值=as
    CC                       C編譯程序,默認值=cc
    CPP                       C預處理程序,默認值= cpp
    RM                       文件刪除程序,默認值="rm -f"
    ARFLAGS                   傳給歸檔維護程序的標志,默認值=rv
    ASFLAGS                   傳給匯編程序的標志,沒有默認值
    CFLAGS                   傳給C編譯器的標志,沒有默認值
    CPPFLAGS                 傳給C預處理程序的標志,沒有默認值
    LDFLAGS                   傳給鏈接程序(ld)的標志,沒有默認值
    posted on 2005-08-04 21:54 ivaneeo 閱讀(282) 評論(0)  編輯  收藏 所屬分類: GNU牛力
    主站蜘蛛池模板: 亚洲综合av一区二区三区| 亚洲片国产一区一级在线观看| 亚洲AV无码不卡无码| 一本久久免费视频| 亚洲精品亚洲人成在线观看下载 | 日本亚洲欧美色视频在线播放 | 国产成人精品免费视频大全五级 | 亚洲AV无码乱码在线观看牲色| 亚洲精品天堂成人片AV在线播放| 噼里啪啦电影在线观看免费高清| 亚洲人成免费网站| 在线观看免费成人| 亚洲av日韩av永久在线观看| 免费一级毛片不卡在线播放| 精品乱子伦一区二区三区高清免费播放| 亚洲精品无码久久久久AV麻豆| 免费一区二区无码东京热| 亚洲资源在线观看| 无码国产精品一区二区免费I6| 亚洲国产精品自在自线观看| 亚洲高清无码综合性爱视频| 两性色午夜免费视频| 夜夜亚洲天天久久| 天天看片天天爽_免费播放| 特级毛片A级毛片免费播放| 国产成A人亚洲精V品无码| 99re在线视频免费观看| 亚洲欧洲专线一区| 亚洲国产一区二区三区| 久9热免费精品视频在线观看| avtt天堂网手机版亚洲| 一级毛片直播亚洲| 久草福利资源网站免费| 亚洲日韩中文字幕无码一区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 最新欧洲大片免费在线| 特级毛片全部免费播放a一级| 亚洲人成中文字幕在线观看| 免费精品国产自产拍在线观看图片| 国产亚洲精品国产福利在线观看| 亚洲国产第一站精品蜜芽|