每條命令的開頭必須以 tab 鍵開頭,除非命令是跟在依賴規則後的分號後面。在命令列之間中的空格或者空行會被忽略,但是如果該空格或空行是以 tab 鍵開頭的,那麼 make 會認為其是乙個空命令。
如果我們在編譯過程中,可以顯示正在編譯哪一步,就會很方便我們對程式編譯的監控。我們可以使用makefile的一些顯示命令,新增上一些類似注釋的資訊,伴隨編譯的過程列印到控制台上。
在makefile中,當我們在命令行前加上@ ,那麼這個命令將不會被 make 顯示出來。我們常用@echo命令顯示一些有用的資訊,如我們以下這個makefile檔案:
all:main1 main2
.phony : all
main_1_obj = main.o hello.o car.o
main1: $(main_1_obj)
@echo 正在建立程式main1...
gcc -o main1 $(main_1_obj)
main.o hello.o:hello.h
main.o car.o:car.h
main2:main2.o
@echo 正在建立程式main2...
@gcc -o main2 main2.o
cleanobj:
@echo 正在刪除目標檔案...
-rm*.o
@echo 正在刪除可執行檔案main1 main2
-rm main1 main2
在命令行前加上@ ,那麼這個命令將不會被 make 顯示出來:
~/desktop/mydir$ make
cc -c -o main.o main.c
cc -c -o hello.o hello.c
cc -c -o car.o car.c
正在建立程式main1...
gcc -o main1 main.o hello.o car.o
cc -c -o main2.o main2.c
正在建立程式main2.
..
可以看到echo命令沒有被顯示出來,gcc -o main2 main2.o這行命令前,因為有@,所以在make時,也沒有被顯示出來,但是他們都被執行了。
如果執行make命令時,帶上引數 -n 或 --just-print,那麼其只是顯示命令,但不會執行命令:
~/desktop/mydir$ make -n
cc -c -o main.o main.c
cc -c -o hello.o hello.c
cc -c -o car.o car.c
echo 正在建立程式main1...
gcc -o main1 main.o hello.o car.o
cc -c -o main2.o main2.c
echo 正在建立程式main2...
gcc -o main2 main2.o
這個功能很方便我們除錯makefile,可以檢視書寫的makefile命令最後要執行的內容和執行的順序。
如果執行make命令時,帶上引數 -s 或 --silent 或 --quiet 則會禁止命令在控制台的列印,但命令會被執行:
~/desktop/mydir$ make -s
正在建立程式main1...
正在建立程式main2...
~/desktop/mydir$ ls
car.c car.o hello.c hello.o main2 main2.o main.o module
car.h hello hello.h main1 main2.c main.c makefile
謝謝閱讀 Makefile顯示命令
make的時候會將執行的命令列顯示在螢幕上,使用 後將遮蔽命令資訊。make 執行時,帶入make引數 n 或 just print 那麼其只是顯示命令,但不會執行命令,這個功能很有利於我們除錯我們的makefile,看看我們書寫的命令是執行起來是什麼樣子的或是什麼順序。make 引數 s 或 sl...
makefile高階(二) 命令
本文由導學寶 每個目標裡都可以執行shell命令,每個命令前以 tab 開頭,它不能是空格。通常情況下,你執行的命令會在輸出中顯示出來,比如 output echo hello 執行make會有如下結果 make output echo hello hello 有時我們不希望把執行的命令顯示出來,我...
Makefile 中的命令
上例子 all gao echo final default echo in default 由於 gao 是乙個前提條件,但是 makefile中沒有乙個名字為 gao的目的。所以符合 default 目的的執行條件 故執行結果為 in default final 完畢在一些大的工程中,我們會把我...