日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

makefile中一些符号的含义

發布時間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 makefile中一些符号的含义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 先標注一個很好的makefile教程
  • 這里歸納了如下符號的含義,請對號入座如下 $@, $^, $<, $?和=, +=, :=, ?=和;\ 和 $, $$和%
  • section1:(自動化變量,更多自動化變量可參照)
    • $@ 表示目標文件(標的)
      $^ 表示所有的依賴文件(標的)
      $< 表示第一個依賴文件(標的)
      $? 表示比目標還要新的依賴文件列表
    • 例子分析:(如有hello.c hi.c main.c 源文件,按照 Makefile 規則寫)
    main: main.o hello.o hi.ogcc -o main main.o hello.o hi.o main.o: main.ccc -c main.c hello.o: hello.ccc -c hello.c hi.o: hi.ccc -c hi.c clean:rm *.orm main 那么用上面符號進行書寫則為:main: main.o hello.o hi.ogcc -o $@ $^ main.o: main.ccc -c $< hello.o: hello.ccc -c $< hi.o: hi.ccc -c $< clean:rm *.orm main
  • section2:
    • = 直接對變量賦值
    • += 追加賦值
    • := 該符號右側是否有變量,如有變量且變量的定義在后邊,則忽略該右側變量,其他情況同=號
    • ?= 如果符號左側的變量已經定義過則跳過該句。
    • section2的具體例子可參照
  • section3:(分號和反斜線)
    • 分號是分隔符,反斜線是換行符。像if語句塊或for語句要寫在一行時,必須使用分號進行分隔,在此期間如需進行換行則使用反斜線\進行換行即可。此外,注意if語句后的左中括號[前后都有有空格,雙等號“==”表示相等符號,單等號“=”既可以表示相等也可表示賦值,其區別為:當比較時,比較符號左右都有空格;賦值時,等號左右沒空格。
  • section4:( $和$$)
    • 單美元符號$表示引用makefile定義變量的值,雙美元符號$$表示引用shell命令中定義的變量的值。一些使用事項可參照
  • section5:%(makefile中通配符,附與系統通配符的區別)
    • 區別1:Makefile中的%標記和系統通配符*的區別在于,*是應用在系統中的,%是應用在這個Makefile文件中的。
    • 區別2:Makefile的通配符%是在**帶著目的(如“尋找test1.o”)**的時候才會把他要尋找的目標套用通配符%中。而系統通配符*是我不知道目標的名字,系統該目錄下中所有后綴為.c的文件都是我要找的。
    • 重要例子:
      如果你想編譯一個文件夾下的所有.c文件,你可能會這樣寫:
    %.o:%.cgcc -o $@ $< 但是如果整個文件只有這兩行的話,就會出現這樣的錯誤:
    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中一些符号的含义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。