在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中打印
- $(warning “想要打印的信息\$(要打印的變量)”)
- @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 ,這個參數的意思是,如果某 規則中的命令出錯了,那麼就終止該規則的執行,但繼續執行其它規則。
忽略錯誤
-
:標記爲不管命令出不出錯都認爲是成功的- make加上 -i 或是 –ignore-errors 參數,那麼,Makefile中 所有命令都會忽略錯誤
- -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 @