Makefile語法

在Makefile中的命令,必須要以 Tab 鍵開始

通配符

make支持三個通配符: * , ? 和 ~
1. ~:~/test ,這就表示當前用戶 的 $HOME 目錄下的test目; ~hchen/test: 則表示用戶hchen的宿主目錄下的test 目錄

# 1. 列出一確定文件夾中的所有 .c 文件
objects := $(wildcard *.c)
# 2. 列出(1)中所有文件對應的 .o 文件
%(patsubst %.c,%.o,$(wildcard *.c))

“wildcard”,“patsubst”是Makefile的關鍵字

判斷語句

# 判斷變量$(CC)的值是否爲gcc
# 是執行$(CC) -o foo $(objects) $(libs_for_gcc)語句
# 不是執行$(CC) -o foo $(objects) $(normal_libs)語句
ifeq ($(CC),gcc)
    $(CC) -o foo $(objects) $(libs_for_gcc)
else
    $(CC) -o foo $(objects) $(normal_libs)
endif

Makefile中打印

  1. $(warning “想要打印的信息\$(要打印的變量)”)
  2. @echo ‘想要打印的信息’
[root@localhost ~]# cat Makefile 
all:
    echo "make all"
clean:
    echo "make clean"
    echo "print none"
    @echo "print @"

[root@localhost ~]# make clean
echo "make clean"
make clean
echo "print none"
print none
print @

沒有@是會回顯

調試Makefile/make參數

調試:

-n 或 –just-print ,那麼其只是顯示命令,但不會執行 命令
-s 或 –silent 或 –quiet 則是全面禁止命令的顯示

其他參數:

-i 或是 –ignore-errors 參數,那麼,Makefile中 所有命令都會忽略錯誤
-k 或是 –keep-going ,這個參數的意思是,如果某 規則中的命令出錯了,那麼就終止該規則的執行,但繼續執行其它規則。

忽略錯誤

  1. -:標記爲不管命令出不出錯都認爲是成功的
  2. make加上 -i 或是 –ignore-errors 參數,那麼,Makefile中 所有命令都會忽略錯誤
  3. -k 或是 –keep-going ,這個參數的意思是,如果某 規則中的命令出錯了,那麼就終止該規則的執行,但繼續執行其它規則。

函數的定義與調用

define func
command1
command2

endef

函數調用
$(func)

執行shell

$(shell shell代碼)
在Makefile文件的目標項冒號後的另起一行的代碼纔是shell代碼。

all:
    xx=33

Makefile中的shell,每一行是一個進程,不同行之間變量值不能傳遞。所以,Makefile中的shell不管多長也要寫在一行。
調用shell變量:$$()

[root@localhost ~]# cat Makefile 
ww=$(shell uname -a) #shell代碼執行結果賦給一個變量
all:
    echo "make all"
clean:
    @echo $(ww)# 
    echo "make clean"
    echo "print none"
    @echo "print @"

[root@localhost ~]# make clean
Linux localhost.localdomain 3.10.0-123.el7.x86_64
echo "make clean"
make clean
echo "print none"
print none
print @

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章