makefile中一些符号的含义
生活随笔
收集整理的這篇文章主要介紹了
makefile中一些符号的含义
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 先標注一個很好的makefile教程
- 這里歸納了如下符號的含義,請對號入座如下 $@, $^, $<, $?和=, +=, :=, ?=和;\ 和 $, $$和%
- section1:(自動化變量,更多自動化變量可參照)
- $@ 表示目標文件(標的)
$^ 表示所有的依賴文件(標的)
$< 表示第一個依賴文件(標的)
$? 表示比目標還要新的依賴文件列表 - 例子分析:(如有hello.c hi.c main.c 源文件,按照 Makefile 規則寫)
- $@ 表示目標文件(標的)
- section2:
- = 直接對變量賦值
- += 追加賦值
- := 該符號右側是否有變量,如有變量且變量的定義在后邊,則忽略該右側變量,其他情況同=號
- ?= 如果符號左側的變量已經定義過則跳過該句。
- section2的具體例子可參照
- section3:(分號和反斜線)
- 分號是分隔符,反斜線是換行符。像if語句塊或for語句要寫在一行時,必須使用分號進行分隔,在此期間如需進行換行則使用反斜線\進行換行即可。此外,注意if語句后的左中括號[前后都有有空格,雙等號“==”表示相等符號,單等號“=”既可以表示相等也可表示賦值,其區別為:當比較時,比較符號左右都有空格;賦值時,等號左右沒空格。
- section4:( $和$$)
- 單美元符號$表示引用makefile定義變量的值,雙美元符號$$表示引用shell命令中定義的變量的值。一些使用事項可參照
- section5:%(makefile中通配符,附與系統通配符的區別)
- 區別1:Makefile中的%標記和系統通配符*的區別在于,*是應用在系統中的,%是應用在這個Makefile文件中的。
- 區別2:Makefile的通配符%是在**帶著目的(如“尋找test1.o”)**的時候才會把他要尋找的目標套用通配符%中。而系統通配符*是我不知道目標的名字,系統該目錄下中所有后綴為.c的文件都是我要找的。
- 重要例子:
如果你想編譯一個文件夾下的所有.c文件,你可能會這樣寫:
Make: *** target not found. stop.
要知道原因,我們先來看看另一個makefile的運行過程,例如有Makefile如下:test1.o:test1.cgcc -o test1.o test1.c test2.o:test2.cgcc -o test2.o test2.c all:test1.o test2.o 如果沒有指定輸出項目的時候Make會自動找到makefile中第一個目標中沒有通配符的目標進行構造,所以步驟是:
1、構造all,發現需要test1.o和test2.o
2、這個時候他就會在Makefile文件中找到目標能匹配test1.o和test2.o的規則。
3、找到test1.o的規則并且知道test1.c存在,運行下面的命令。
4、同步驟三構造出test2.o
5、現在構造all的源文件已經齊全,構建all
其中最重要的是第2步。
Makefile的通配符是在帶著目的(如“尋找test1.o”)的時候才會把他要尋找的目標套用通配符%中。
而系統通配符*的意思是:
1、我不知道目標的名字,系統該目錄下中所有后綴為.c的文件都是我要找的。
2、然后遍歷目錄的文件,看是否匹配。找出所有匹配的項目。
總結
以上是生活随笔為你收集整理的makefile中一些符号的含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017年,我要怎么学前端
- 下一篇: 电化学传感器结构