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

來源:互聯網
上載者:User

<)makefile中的變數

類似c語言中的宏,聲明如下:

objects=test1.o test2.o test3.0 test4.o

之後就可以用$(objects)來引用這個變數

<)偽目標檔案

.PHONY:clean
chean:
  rm test

.PHONY標籤,表示clean是一個偽目標,必須顯示的指定在命令中才能執行,比如執行:make chean

 

<)makefile裡包含5樣東西:顯示規則、隱晦規則、變數定義、檔案指示、注釋

1.顯示規則:顯示指出要產生的檔案、檔案依賴、產生命令

2.隱晦規則:自動推導

2.變數定義:當makefile被執行時,其中的變數會被擴充成具體的對象

4.檔案指示:一個makefile引入另一個makefile,像c語言的include;根據條件判斷有效部分,比如if,then,else;定義多行命令包

5.注釋:用#來注釋一行

 

<)顯式指定makefile檔案的檔案名稱

-f參數,例如:

make -f makefileTest

 

<)include其它的makefile

include test.mk

上例,把test.mk檔案中的內容,放到上面語言所在位置

 

<)指定檔案目錄

make -I /usr/local/bin

-I參數,make執行時,到指定的目錄去尋找檔案

 

<)make執行步驟:

1.讀入所有Makefile

2.讀入被include的其他makefile

3.初始設定變數

4.推導隱晦規則,並分析規則

5.為所有檔案建立依賴關係鏈

6.根據依賴關係,決定哪些目標需要重建

7.執行產生命令

1-5為第一階段,6-7為第二階段

第一階段中,定義的變數如果被使用了,make為把他展開在使用的位置

但是是延後展開,如果變數出現在依賴關係中,這條依賴被使用時才展開

 

<)萬用字元*

"*.o"表示所有的.o檔案

clean:
  rm -f *.o

刪除所有.o檔案

然而*萬用字元用在變數中時,之能代表"*.o"自己本身,不會展開,如下:

objects=*.o

要想*在變數中展開,等於所有.o檔案的集合,必須用關鍵字wildcard:

objects:=$(wildcard *.o)

<)檔案搜尋索引鍵:vpath

vpath  匹配模式 檔案路徑

比如,所有/usr/test目錄下的所有.m檔案:

vpath %.m /usr/test

%匹配零個或若干個字元

搜尋多個路徑,每個目錄用":"隔開

 

<)一次產生多個可執行檔

可以用偽目標來實現

當把偽目標做為終極目標,放在一個位置;並為它指定依賴檔案,這些依賴檔案為將要產生可執行檔

all:test1 test2 tes3
.PHONY:all
tes1:test1.o
  cc -o test1 test1.o
tes2:test2.o
  cc -o test2 test2.o
test3:test3.o
  cc -o test3 test3.o

一次產生test1,test2,test3三個可執行檔

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.