(1)普通變數
如:obj=main.o add.o sub.o mul.o div.o //將後面的值賦值給obj,obj就是乙個普通變數
target=zsx //將zsx賦值給target
makefile中已經定義的一些普通變數(通常格式都是大寫,類似環境變數,它們都是普通變數,直接賦值即可,任意型別皆可):cc,其值為gcc或cc(cc就是gcc,完全等價),且使用者還可以修改這些值。
(2)自動變數
$<:>
注意:這些變數只能在規則的命令中使用
(3)舉例
則通過使用自動變數和普通變數,可以簡化makefile的書寫,下面舉例說明。依然使用上篇的文章的例子。
[root@localhost src]# vim makefile
obj=main.o add.o sub.o mul.o div.o //普通變數
target=zsx //普通變數
$(target):$(obj)
$(cc) -ggdb3 $^ -o $@ //自動變數只能使用在命令中
main.o:main.c
$(cc) -pedantic -pipe -wall -c $^ -o $@ -i ../include //單獨拿出來 是因為其需要指明標頭檔案,而標頭檔案在另乙個目錄中
%.o:%.c
$(cc) -pedantic -pipe -wall -c $< -o $@
[root@localhost src]# ls
add.c div.c main.c makefile mul.c sub.c
[root@localhost src]# make
cc -pedantic -pipe -wall -c main.c -o main.o -i ../include
cc -pedantic -pipe -wall -c add.c -o add.o
cc -pedantic -pipe -wall -c sub.c -o sub.o
cc -pedantic -pipe -wall -c mul.c -o mul.o
cc -pedantic -pipe -wall -c div.c -o div.o
cc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx
[root@localhost src]# ls
add.c add.o div.c div.o main.c main.o makefile mul.c mul.o sub.c sub.o zsx
[root@localhost src]# ./zsx
sum = 26
makefile自動變數
下面是所有的自動化變數及其說明 表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,就是匹配於 目標中模式定義的集合。僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果乙個目標是 foo.a bar.o 那麼,就是 bar.o 就是 foo.a 如果目標不是函式庫檔案 unix 下是...
交換兩個變數
目的 實現兩個變數值的交換 以int 型別為例 方法一 使用臨時變數。優點 安全,適合任何型別資料交換,無溢位風險。缺點 保守 效率不高,需要使用第三方臨時變數 棧空間 1 void swap value int var1,int var2 2 方法二 利用 算術運算實現。優點 不需要額外的臨時變數...
Makefile中三個自動變數 , ,
所謂自動變數,就是這種變數會把模式中所定義的一系列的檔案自動地挨個取出,直至所有的符合模式的檔案都取完了。這種自動化變數只應出現在規則的命令中。以乙個例子說明 objs ifconfig.o tftp util.o ping.o srcs objs o c phony all all built i...