海思的乙個 Makefile 解析

2022-05-26 05:06:06 字數 2492 閱讀 9880

@rm -f *.mp4

include ../makefile.param
在makefile也和c語言一樣有include的用法,include後面跟乙個makefile檔名,其功能和c語言中的include類似,就是把被包含的makefile檔案的內容全部原本的複製到包含檔案中來。

這個用法多用於在乙個專案中有多個makefile,分別在不同的目錄下,這樣我 們可以寫乙個公共makefile,這個makefile中包含一些公共變數的定義,其他目錄下的makefile可以把這個公共makefile檔案包含進去。

src := $(wildcard *.c)
#方式一:定義多行變數  

define variable

value

value

endef

#方式二:

variable = value

#方式三:

variable := value

#方式四:

variable += value

#方式五:

variable ?= value

這些定義方式中,按照展開方式不同分為:

變數的引用可以採用兩種方式:

$(variable)

$

一般我們可以使用下面這一句來獲取工作目錄下的所有的.c檔案列表:

$(wildcard *.c)
在makefile規則中,萬用字元會被自動展開。但在變數的定義和函式引用時,萬用字元將失效。這種情況下如果需要萬用字元有效,就需要使用函式wildcard,它的用法是:

$(wildcard pattern...)
在makefile中,它被展開為已經存在的、使用空格分開的、匹配此模式的所有檔案列表。如果不存在任何符合此模式的檔案,函式會忽略模式字元並返回空。

obj := $(src:%.c=%.o)
這裡用到makefile裡的替換引用規則,即用您指定的變數替換另乙個變數。它的標準格式是:

$(var:a=b) 或 $
它的含義是把變數var中的每乙個值結尾用b替換掉a。

%」的意思是匹配零或若干字元,例如:

%.h
表示所有以「.h」結尾的檔案,它是在gunmake的語法層次上的,例如

vpath %.h ../headers
該語句表示,要求make在「../headers」目錄下搜尋所有以「.h」結尾的檔案.

*是shell所支援的萬用字元,是在shell的語法層次上,*.c,一般用在shell命令裡面,如:

clean:

rm -f *.o

.phony : clean all
關鍵字.phony告訴make該目標是「假的」(磁碟上其實沒有clean),這時make為生成這個目標就會將其規則執行一次。.phony修飾的目標就是只有規則沒有依賴。

表示所有的目標(乙個或者多個目標)

@rm -f $(target)
其中 @ 表示:如果 makefile 檔案中執行的命令前面加了@字元,則不顯示命令本身而只顯示它的結果。

海思vdec的Makefile結構

hisilicon hi35xx sample makefile include makefile.param srcs wildcard c target srcs c compile linux or huaweilite include pwd ostype mak print echo os...

makefile的乙個模板

include i.include i usr local include libxml2 i usr local ssl include i usr local include target agent lib lstdc lrt lpthread lxml2 objs patsubst cpp,...

編寫乙個makefile

什麼是makefile?對於大多數的windows程式設計師來講,makefile可能不是那麼重要,因為windows的ide都為程式設計師做好了這個工作。但是在linux下程式設計,會不會寫makefile,從側面上說明乙個人是否具備完成大型工程的能力。makefile的作用 makefile是用...