8.1查看環境變量
$ env?顯示所有環境變量設置。
$ echo $ENV_VARIABLE?顯示指定環境變量的設置。
示例:
$ echo $PATH
/bin:/etc:/usr/bin:/tcb/bin
8.2設置環境變量
$ ENV _ VARIABLE = XXX導出環境變量
示例:
$ PATH = $ PATH:$ Informix dir/bin;導出路徑?將環境變量PATH設置為原始路徑值+$INFORMIXDIR/bin。
8.3取消環境變量的設置
$ unset $ENV_VARIABLE
示例:
$ set GZJ = gzj導出GZJ?設置環境變量GZJ
$ echo $GZJ
gzj?顯示環境變量值
$ unset $GZJ?取消環境變量GZJ的設置。
$ echo $GZJ
取消
makefile規則
Makefile是壹個make規則描述腳本文件,包括四類行:目標行、命令行、宏定義行和make偽指令行(如“include”)。makefile文件中的註釋以“#”開頭。當壹行寫不下時,可以用續行符“\”轉到下壹行。
1.1目標線
目標行告訴make要構建什麽。它包括壹個目標名稱表,後跟壹個冒號“:”,然後是壹個依賴關系表。
示例:
示例:depfile deptarget
目標行表示目標示例依賴於depfile和deptarget。如果修改了depfile或deptarget,將重新生成目標。
示例1示例2示例3:deptarget 1 deptarget 2 depfile
target行表示目標名稱表中的三個獨立目標,即example1、example2和example3,是由相同的依賴列表和規則生成的。
清潔:
空的依賴項列表意味著目標清理沒有其他依賴項。
目標行後以Tab開頭的行表示目標的生成規則,Tab字符不能用空格替換。例如:
example.o:example.c
cc–c示例
該示例表明目標example.o依賴於example.c和example.h。如果example.c或example.h發生更改,您需要執行命令cc -c example.c來重新生成目標example.o。
您可以使用文件名模式匹配來自動生成目標的依賴關系表,例如:
prog: *。c
下面是壹個簡單makefile的示例:
圖1 makefile的最簡單的例子
當make使用makefile時,它從第壹個目標開始掃描。上例中的第壹個目標是all,所以不會自動執行目標clean,可以通過make clean命令生成目標。
1.2命令行
命令行用於定義生成目標的操作。
分號“;”在目標線上。下面的文件都被認為是命令,或者以Tab開頭的壹行也是命令。
例如,在上面的makefile示例中,以第三行中的制表符開始的cc命令是壹個命令行,指示應該執行哪個命令來生成hello。也可以寫成:hello:hello . o;cc–c妳好–L…
通常,命令行命令會在標準輸出中出現。例如,在制作上面的makefile時,標準輸出如下:
cc -c hello.c
cc-o hello-L/usr/x 11r 6/lib-L/usr/lib-lXm-lXt-LX 11 hello . o
妳好1.c
cc-o hello 1-L/usr/x 11r 6/lib-L/usr/lib-lXm-lXt-LX 11 hello 1 . o
如果不想要命令本身的回顯,可以在命令前加上@字符。例如,如果您不想要上面示例中cc -c hello.c和CC cc -c hello1.c的回顯,可以按如下方式修改makefile:
圖2回聲抑制的makefile示例
制作這個makefile時,標準輸出如下:
cc-o hello-L/usr/x 11r 6/lib-L/usr/lib-lXm-lXt-LX 11 hello . o
cc-o hello 1-L/usr/x 11r 6/lib-L/usr/lib-lXm-lXt-LX 11 hello 1 . o
正如您所看到的,命令行前的@字符沒有被回顯。
1.3宏定義線
在makefile中,可以使用宏定義來減少用戶輸入。例如,在上面的示例中,hello和hello1的編譯選項是“-L/USR/x 11r 6/LIB-L/USR/LIB-LXM-LXT-LX 11”。
圖3使用宏定義的makefile示例
宏定義的基本語法是:
名稱=值
定義宏時,順序並不重要。宏在使用前不需要定義。如果宏定義了多次,則使用最後定義的值。
您可以使用“$”字符和“()”或“{}”來引用宏,例如:
cc–o hello . o $(cc flags)hello . o
您也可以將壹個宏分配給另壹個宏,但是這樣的定義不能循環嵌套,例如:
a =值1
b =值2
C=$(A) $(B)等價於C=value1 value2。
1.4偽指令
Makefile大多由宏定義行、命令行和目標行組成。第四種類型是make偽指令行。Make偽指令不規範,不同的make可能支持不同的偽指令集,導致makefile不兼容。如果要考慮可移植性,應該避免使用make指令。但是有壹些偽指令,比如include,因為用的比較多,所以很多不同的make都提供。
1.4.1偽指令包括
這個指令類似於C語言中的#include,它允許編寫公共定義並壹次性包含它們。include指令必須在壹行上,並且第壹個元素必須是include,後跟要包含的文件名,例如:
包含default.mk
1.4.2偽指令“#”
“#”字符也是make的偽指令,表示“#”後面的文件是註釋,比如:
PROGNAME =測試#定義宏
#不要修改這個
雙後綴規則
2.1雙後綴規則
在前面的makefile示例中,有許多重復。例如,生成hello和hello1的命令是相似的,生成hello.o和hello1.o的命令是相似的,只是編譯或鏈接的文件不同。這個時候,我們可以使用後綴規則。首先看壹個雙後綴的例子:
圖4使用雙後綴規則的makefile示例
後綴規則使用特殊的目標名稱”。後綴”。
第壹行是。SUFFIXES是空的,用來清除原來的後綴規則,因為。後綴可以在makefile中多次使用,每次都要在前壹個後綴規則上添加壹個新的後綴規則。
第二行中指定的後綴規則是"。c .o ",這意味著所有。c文件被轉換成。o文件。
第三行指定轉換。c文件轉換成。o檔。$(CC)是make的預定義宏,其默認值為CC,$
第六行指定了目標hello和hello1的生成方法。$@是壹個特殊的宏,它替換當前的目標名稱,即hello和hello1,以及$ @。o是hello.o和hello1.o。
上面的例子介紹了雙後綴規則,即包含兩個後綴,比如。c.o,用於將C源文件編譯成目標文件。雙後綴規則描述了如何從第壹後綴類型的文件生成第二後綴類型的文件。例如,在。c.o規則描述了如何生成?o文件從a. c文件。
2.2單後綴規則
單後綴規則描述了如何從帶有指定後綴的文件生成帶有基本名稱的文件。例如,使用單後綴規則。c,hello和hello1.c可以生成hello和hello1文件。例如,將前面的makefile更改為:
圖5使用單後綴規則的makefile示例
因為。c後綴規則是make的標準後綴規則,make為其指定了相應的命令行,沒有必要在makefile中指定其目標生成的具體命令行。
下表是make提供的標準後綴規則。
表1制定標準後綴規則
後綴規則命令行
。c $(link . c)–o $ @ $ & lt;$(LDLIBS)
. c.ln $(LINK.c) $(POUTPUT OPTPUT選項)-I $ & lt;
. c.o $(COMPILE.c) $(輸出選項)$ & lt
. c . a $(compile . c)-o $ % $ & lt;
$(AR) $(ARFLAGS) $@ $%
美元(RM) $%
三個特殊目標
特殊目標。後綴在後綴規則中用於指定新的後綴規則。Make還提供了幾個特殊的目標來設置make的行為。以下是壹些特殊目標:
。忽視
make執行命令行時,如果返回錯誤代碼,make默認的動作是停止並退出。添加這個目標後,make會忽略命令行返回的錯誤代碼,繼續執行後續操作。
。沈默的
如前所述,make在執行命令行時會回顯命令行的內容,在命令行前添加“@”字符會抑制命令行的回顯。
如果添加了這個目標,所有的命令行都將不再回顯,這相當於在每個命令行前添加了“@”字符。
。珍貴的
當接收到信號或從shell命令返回非零錯誤代碼時,make會刪除所有已建立的文件。但是,即使有些文件是錯誤的,用戶也不希望make刪除它們。這些文件可以用作。珍貴的目標。它可以在makefile中多次出現,每次都會累積文件列表。
。後綴
它為makefile指定了壹個新的後綴規則,這個新的後綴規則作為。後綴。。後綴可以在壹個makefile中多次使用,每次都要在前壹個後綴規則上添加壹個新的後綴規則。如果的依賴表。後綴為空,後綴規則表被設置為空。
四個特殊宏
為了簡單地使用規則,make提供了幾個特殊的宏:
$@
整個當前目標名稱的值可以由宏“$ @”替換。
$ & lt
當前源文件由“$
$*
當前目標的基本名稱由宏“$ *”替換。例如,如果目標的名稱是hello.o,則基本名稱是不帶後綴. o的hello。
上面介紹的特殊宏使用的是make本身的規則,用戶無法更改。下表描述了c語言中預定義的宏。
用法宏的默認值
庫文件匯編命令AR ar
ARFLAGS rv
和...壹樣
ASFLAGS
compile . s $(AS)$(AS flags)$(TARGET ARCH)
c編譯器命令CC cc
CFLAGS
CPPFLAGS
compile . c $(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET ARCH)–c
link . c $(CC)$(CFLAGS)$(CPPFLAGS)$(LD flags)$(TARGET ARCH)
鏈接編輯器命令LD ld
LDFLAGS
Rm命令RM
後綴列表suffixes . o . c . c ~ . s . s . s ~ . ln . f . f ~ . f . f ~ . l . mod . mod ~ . sym
。凈化def~。p .p~。r .r~。y .y~。h .h~。先令sh~。cps。cps~
makefile的五個應用
調用make時,它在當前目錄中搜索文件名為“makefile”或“Makefile”的文件並執行。
如果不想使用上面的默認文件,可以在命令行中使用“-f”來指定文件。如果將編寫的makefile命名為mklib,可以指定為“make -f mklib”。