iphone-命令列編譯之make和Makefile(三)

來源:互聯網
上載者:User

一、自動化變數

把模式所以定義的一系列檔案自動逐個取出,直到所有的模式檔案都取完

1.$@

目標的集合,就像數組,表示依次取出目標,並執行命令

 

2.$<

如果依賴目標是以模式“%”定義的,“$<”表示符合這模式的檔案集。表示依次取出依賴檔案

 

3.$?

所有比目標新的依賴檔案集合

 

4.$^

所以依賴集合,以空格分隔。如果中間有重複檔案,去除重複,保留部分

 

5.$+

和$^類似,所有依賴集合,不去重

 

6.$%

僅當目標是庫檔案時,表示庫檔案中的成員名。例如“test.a(content.o)”,那麼“$%”表示content.o,“$@”表示test.a

 

二、靜態模式

目的地組合:目的地組模式:目的地組依賴模式
  命令
objects=tes1.o test2.o

all:$(objects)
$(objects):%.o:%.c
  cc -c $< -o $@

$<表示依賴目的地組,“test1.c test2.c”

$@表示目的地組,“test1.o test2.o”

規則展開後:

test1.o:test1.c  cc -c test1.c -o test1.otest2.o:test2.c  cc -c test1.c -o test2.o

 

三、Makefile的函數

$(函名名)

1.subst截取字元

$(subst 被截取字串,要替換成的字串,原始字串)

$(subst chr,h,chrome)

上例是把字串chrome的chr截取掉,替換為h,變成home

 

2.filter過濾檔案

$(filter 匹配模式,總的目的地組)

targets=test1.o test2.c test3.o

$(filter %.o,$(targets))

把targets集合的所有.o檔案過濾出來,等於:“test1.o test3.o”

 

3.替換字串

比如定義了變數sources

sources=test1.c test2.c test3.c

把所有.c檔案替換為.o檔案

方法1:

$(sources:.c=.o)

方法2:

$(patsubst %c,%.o,$(sources))

返回修改後的集合:

test1.o test2.o test3.o

四、自動產生依賴性

編譯器用"-M"參數,自動尋找源檔案中包含的標頭檔,並產生依賴關係

比如:test.c中有“#include "config.h"”,依賴關係為

test.o:test.c config.h

可以執行如下命令:

cc -M test.c

輸出:

test.o:test.c config.h

GNU的gcc編譯器為“-MM”參數: gcc -MM test.c

如果為“-M”的話,會包含所有標準庫的標頭檔

五、命令

預設的,在命令執行前,make會把要執行的命令輸出到螢幕

1.@屏蔽某條命令顯示:用@字元在命令列前,則這個命令不會被顯示在螢幕上

2.“-n”參數,只顯示命令,而不執行

3.“-s”屏蔽所有命令顯示

4.如果要讓上一條命令結果應用到下一條命令,用分號隔開,寫在同一行

5."-"忽略命令錯誤,只要在命令前加一個減號“-”符

6.全域忽略錯誤,只要在make命令的時候,加“-i”參數

7.跳過出錯規則,繼續執行其他規則,只要make命令裡加“-k”參數

8.定義命令包,用define開始,用endef結束

define function_test
命令1
命令2
endef

執行命令:$(function_test)

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.