日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux/Unix環(huán)境下的make命令詳解( 二 )


Makefile中允許使用簡(jiǎn)單的宏指代源文件及其相關(guān)編譯信息,在Linux中也稱宏為變量 。在引用宏時(shí)只需在變量前加$符號(hào),但值得注意的是,如果變量名的長(zhǎng)度超過一個(gè)字符,在引用時(shí)就必須加圓括號(hào)() 。
下面都是有效的宏引用:
$(CFLAGS)
$2
$Z
$(Z)
其中最后兩個(gè)引用是完全一致的 。
需要注意的是一些宏的預(yù)定義變量,在Unix系統(tǒng)中,$*、$@、$?和$<四個(gè)特殊宏的值在執(zhí)行命令的過程中會(huì)發(fā)生相應(yīng)的變化,而在GNU make中則定義了更多的預(yù)定義變量 。關(guān)于預(yù)定義變量的詳細(xì)內(nèi)容,宏定義的使用可以使我們脫離那些冗長(zhǎng)乏味的編譯選項(xiàng),為編寫makefile文件帶來很大的方便 。
 # Define a macro for the object files
 OBJECTS= filea.o fileb.o filec.o
 # Define a macro for the library file
 LIBES= -LS
 # use macros rewrite makefile
 prog: $(OBJECTS)
 cc $(OBJECTS) $(LIBES) -o prog
 ……
此時(shí)如果執(zhí)行不帶參數(shù)的make命令,將連接三個(gè)目標(biāo)文件和庫文件LS;但是如果在make命令后帶有新的宏定義:
make "LIBES= -LL -LS"
則命令行后面的宏定義將覆蓋makefile文件中的宏定義 。若LL也是庫文件,此時(shí)make命令將連接三個(gè)目標(biāo)文件以及兩個(gè)庫文件LS和LL 。

在Unix系統(tǒng)中沒有對(duì)常量NULL作出明確的定義,因此我們要定義NULL字符串時(shí)要使用下述宏定義:
STRINGNAME=
Make命令
在make命令后不僅可以出現(xiàn)宏定義,還可以跟其他命令行參數(shù),這些參數(shù)指定了需要編譯的目標(biāo)文件 。其標(biāo)準(zhǔn)形式為:
【Linux/Unix環(huán)境下的make命令詳解】target1 [target2 …]:[:][dependent1 …][;commands][#…]
[(tab) commands][#…]
方括號(hào)中間的部分表示可選項(xiàng) 。Targets和dependents當(dāng)中可以包含字符、數(shù)字、句點(diǎn)和"/"符號(hào) 。除了引用,commands中不能含有"#",也不允許換行 。
在通常的情況下命令行參數(shù)中只含有一個(gè)":",此時(shí)command序列通常和makefile文件中某些定義文件間依賴關(guān)系的描述行有關(guān) 。如果與目標(biāo)相關(guān)連的那些描述行指定了相關(guān)的command序列,那么就執(zhí)行這些相關(guān)的command命令,即使在分號(hào)和(tab)后面的aommand字段甚至有可能是NULL 。如果那些與目標(biāo)相關(guān)連的行沒有指定command,那么將調(diào)用系統(tǒng)默認(rèn)的目標(biāo)文件生成規(guī)則 。
如果命令行參數(shù)中含有兩個(gè)冒號(hào)"::",則此時(shí)的command序列也許會(huì)和makefile中所有描述文件依賴關(guān)系的行有關(guān) 。此時(shí)將執(zhí)行那些與目標(biāo)相關(guān)連的描述行所指向的相關(guān)命令 。同時(shí)還將執(zhí)行build-in規(guī)則 。
如果在執(zhí)行command命令時(shí)返回了一個(gè)非"0"的出錯(cuò)信號(hào),例如makefile文件中出現(xiàn)了錯(cuò)誤的目標(biāo)文件名或者出現(xiàn)了以連字符打頭的命令字符串,make操作一般會(huì)就此終止,但如果make后帶有"-i"參數(shù),則make將忽略此類出錯(cuò)信號(hào) 。
Make命本身可帶有四種參數(shù):標(biāo)志、宏定義、描述文件名和目標(biāo)文件名 。其標(biāo)準(zhǔn)形式為:
Make [flags] [macro definitions] [targets]
Unix系統(tǒng)下標(biāo)志位flags選項(xiàng)及其含義為:

-f file指定file文件為描述文件,如果file參數(shù)為"-"符,那么描述文件指向標(biāo)準(zhǔn)輸入 。如果沒有"-f"參數(shù),則系統(tǒng)將默認(rèn)當(dāng)前目錄下名為makefile或者名為Makefile的文件為描述文件 。在Linux中,GNU make 工具在當(dāng)前工作目錄中按照GNUmakefile、makefile、Makefile的順序搜索 makefile文件 。
-i 忽略命令執(zhí)行返回的出錯(cuò)信息 。
-s 沉默模式,在執(zhí)行之前不輸出相應(yīng)的命令行信息 。
-r 禁止使用build-in規(guī)則 。
-n 非執(zhí)行模式,輸出所有執(zhí)行命令,但并不執(zhí)行 。
-t 更新目標(biāo)文件 。
-q make操作將根據(jù)目標(biāo)文件是否已經(jīng)更新返回"0"或非"0"的狀態(tài)信息 。
-p 輸出所有宏定義和目標(biāo)文件描述 。

推薦閱讀