国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Makefile中$$的使用

2019-11-08 01:44:04
字體:
來源:轉載
供稿:網友
             Makefile中使用$$的使用 2008-07-16 11:24:01

分類:

Makefile中使用$$的使用    在makefile中,會經常使用shell命令,也經常見到$var 和 $$var的情況,有什么區別呢,區別大了。不要認為在makefile的規則的命令行中使用$var就是將makefile的變量和shell共享了,這里僅僅是讀取makefile的變量然后擴展開,將其值作為參數傳給了一個shell命令。而$$var是在訪問一個shell命令內定義的變量,而非makefile的變量。此外,如果某規則有n個shell命令行構成,而相互之間沒有用';'和'/'連接起來的話,就是相互之間沒有關聯的shell命令,相互之間也不能變量共享。看如下例子:makefile代碼段1:VAR=3   target: PRerequsite1 prerequsite2    echo $VAR      (1)    VAR=4           (2)    echo $VAR         (3)    echo $$VAR         (4)    在代碼段1中,(1)的結果是3,顯然makefile利用自己的變量將$VAR擴展成3之后傳遞給這個echo這個shell命令。    (2)中,是一個獨立的shell命令自己第一了一個shell變量,名字也叫VAR,且其值為4,不會影響到makefile中的VAR。    (3)中,同(1),makefile中的變量VAR的值依然是3    (4)makefile將$$VAR先執行一次擴展得到如下shell命令:    echo $VAR然后交給shell去解釋執行,可是對于這個shell命令來說VAR是一個為定義的變量,因此輸出的結果就是個空行。makefile代碼段2:VAR=3   target: prerequsite1 prerequsite2    echo $VAR;/      (1')    VAR=4;/           (2')    echo $VAR;/         (3')    echo $$VAR         (4')        在代碼段2中,所有的shell命令都被連接起來了,那么執行的結果就有變化了:    (1')結果同(1),$VAR被替換成了3    (2')結果同(2)    (3')輸出3,因為雖然shell中有VAR變量,可是makefile先要進行擴展,擴展的結果就是echo 3。    (4')輸出4,因為makefile擴展結果為echo $VAR,而shell中已經有了變量VAR,且其值為4.    類似的例子還有如下:    makefile代碼片斷3:    SUBDIRS=tools examples src    target: prerequsite1 prerequsite2       for dir in $SUBDIRS; do $(MAKE) -C $$dir;done        make首先將這個命令擴展成:    for dir in tools examples src; do make -C $dir; done  然后交給shell解釋執行,可見dir就是一個shell中的變量。    總之,在makefile的shell命令中,黨要引用shell變量的時候,要使用$$VAR格式。    此外注意一點,在makefile中,$$還被用來做SECONDEXPANSION,即二次擴展,一般是作為prerequsites.    如:    .SECONDEXPANSION (要使用這個feature就的加上這一行)    main_objs := main.o try.o test.o    lib_objs := lib.o api.o    main lib:   $$($$@_objs)    $$($$@_objs)第一階段的擴展結果為$($@_objs),第2階段的擴展結果為:$@被替換為main lib,與_objs連接成main_objs lib_objs。加上外面$的擴展,就是$main_objs $lib_objs,最終結果為main.o try.o test.o lib.o api.o
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁山县| 祥云县| 乌兰县| 新竹县| 井陉县| 尤溪县| 肥西县| 亚东县| 宿松县| 左贡县| 会东县| 石泉县| 思茅市| 天水市| 厦门市| 苗栗县| 白水县| 汉沽区| 黎平县| 泌阳县| 禄劝| 文昌市| 鹤峰县| 吴旗县| 嫩江县| 涿州市| 通河县| 西乡县| 义乌市| 临桂县| 丹棱县| 洛浦县| 丹凤县| 无为县| 句容市| 牙克石市| 大同县| 宁阳县| 铜川市| 秦皇岛市| 子长县|