makefile(三)使用命令

1. 顯示命令

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,則禁止全部命令的顯示,不論該命令前是否有@符。命令行

2.執行命令

當一個規則被執行時,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會打印出新進入的目錄。

3.命令出錯

每當命令執行完後,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
相關文章
相關標籤/搜索