makefile的兩個變數(自動變數和普通變數)

2021-09-12 18:05:56 字數 1565 閱讀 1776

(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...