make工具要把執行的命令行在命令執行前輸出到屏幕上。當使用@字符在命令行前,這個命令將不被make工具顯示出來,能夠利用這個功能向屏幕輸出一些信息,以下所示:shell
@echo compling...
當make執行時,會在屏幕上輸出「compling...」的字符串,可是不會輸出「@echo compling...」命令。若是將@符號去掉,make工具在執行makefile文件時會將「echo compling...」命令自己輸出,以下:bash
在makefile文件中編輯:工具
tar : echo compling...
執行:spa
若是make工具執行時,make參數是-n或--just-print,則能夠只顯示命令,可是不會執行命令,用戶能夠利用這個功能調試makefile文件,命令在make過程當中執行的順序。.net
make參數是-s或--slient,則禁止全部命令的顯示,不論該命令前是否有@符。命令行
當一個規則被執行時,make工具會一條一條地執行規則後面定義的命令。這些命令能夠是shell中能夠運行的命令,也能夠是一個用戶本身的可執行程序。下面實例演示了在makefile中使用命令,該makefile調用一個當前目錄下的應用程序:調試
#include <stdio.h> int main(void) { printf("hello world\n"); return 0; }
編譯該程序:code
gcc hello.c -o hello
編輯makefile文件:字符串
all : ls ./hello .PHONY : all
執行makefile文件:get
須要注意的是,若是要使上一條命令的結果應用在下一條命令時,應當使用「;」分隔這兩條命令。下面比較說明shell命令的執行結果問題。
編輯makefile文件以下:
exec : cd /home/daowm pwd .PHONY : exec
執行:
編輯makefile文件以下:
exec : cd /home/daowm; pwd .PHONY : exec
執行:
執行兩個makefile時,第一個例子中的cd沒有起做用,pwd會打印當前的makefile目錄。而第二個例子中,cd就起做用了,pwd會打印出新進入的目錄。
每當命令執行完後,make、工具會檢測每一個命令的返回碼。若是命令返回成功,make工具會執行下一條命令。當規則中全部的命令成功返回後,這個規則就算是成功完成了。若是規則中的某個命令出錯了(命令退出碼非0),make工具就會終止執行當前規則,並有可能終止全部的規則。
有些時候,命令的出錯並不表示就是錯誤的。例如mkdir命令,使用該命令的目的就是必定要保證創建一個目錄。若是目錄不存在,那麼mkdir就成功執行,但若是目錄存在,那麼該命令就會出錯。有些時候用戶並不但願由於mkdir命令出錯而終止整個規則的運行。
所以須要忽略命令的出錯。make工具支持在規則的命令行前加一個減號「-」,忽略對該命令執行結果的判斷,以下:
clean: -rm -f *.c
上例表示即便rm命令出錯,該規則也會執行,而不會中止執行該規則。
make的參數-i或者--ignore-errors可使makefile文件中全部命令都忽略錯誤,若是一個規則是以 .IGNORE聲明做爲目標的,那麼這個規則中的全部命令都將忽略錯誤,以下所示:
clean: rm -f *.c .IGNORE : clean