1 環境變數
1.1 編譯器
cc // c語言編譯器,預設值為gcc
cxx // c++語言編譯器,預設值為g++
說明:這是預設的變數,無需使用者自定義(但是使用者可以修改其值,例如cc=arm-linux-gcc,用於交叉編譯)。
1.2 編譯器引數
cflags // c語言編譯器的編譯選項
ldflags // c語言編譯器的鏈結選項
cxxflags // c++語言編譯器的編譯選項
2 自動化變數
$@ 代表規則中的目標檔名。如果目標是乙個文件(linux中,一般稱.a檔案為文件),那麼它代表這個文件的檔名。在多目標的模式規則中,它代表的是哪個觸發規則被執行的目標檔名。
$%規則的目標檔案是乙個靜態庫檔案時,代表靜態庫的乙個成員名。例如,規則的目標是「foo.a(bar.o)」,那麼,「$%」的值就為「bar.o」,「$@」的值為「foo.a」。如果目標不是函式庫檔案,其值為空。
$《規則的第乙個依賴檔名。如果是隱含規則,則它代表通過目標指定的第乙個依賴檔案。
$?所有比目標檔案更新的依賴檔案列表,空格分割。如果目標是靜態庫檔名,代表的是庫成員(.o檔案)的更新情況。
$^規則的所有依賴檔案列表,使用空格分隔。如果目標是靜態庫檔名,它所代表的只能是所有庫成員(.o檔案)名。乙個檔案可重複的出現在目標的依賴中,變數「$^」只記錄它的一次引用情況。就是說變數「$^」會去掉重複的依賴檔案。
$+類似「$^」,但是它保留了依賴檔案中重複出現的檔案。主要用在程式鏈結時,庫的交叉引用場合。
$(@d)代表目標檔案的目錄部分(去掉目錄部分的最後乙個斜槓)。如果「$@」是「dir/foo.o」,那麼「$(@d)」的值為「dir」。如果「$@」不存在斜槓,其值就是「.」(當前目錄)。注意它和函式「dir」的區別!
$(@f)目標檔案的完整檔名中除目錄以外的部分(實際檔名)。如果「$@」為「dir/foo.o」,那麼「$(@f)」只就是「foo.o」。「$(@f)」等價於函式「$(notdir $@)」。
$(%d)
$(%f)當以如「archive(member)」形式靜態庫為目標時,分別表示庫檔案成員「member」名中的目錄部分和檔名部分。它僅對這種形式的規則目標有效。
$(分別表示規則中第乙個依賴檔案的目錄部分和檔名部分。
$(^d)
$(^f)分別表示所有依賴檔案的目錄部分和檔案部分(不存在同一檔案)。
$(+d)
$(+f)分別表示所有依賴檔案的目錄部分和檔案部分(可存在重複檔案)。
$(?d)
$(?f)分別表示被更新的依賴檔案的目錄部分和檔案部分。
3 萬用字元
%是萬用字元,%.cc表示工程裡的.cc檔案
4 變數替換
$(var:a=b) 同$
$替換變數「var」中所有「a」字元結尾的字為「b」結尾的字。「結尾」的含義是空格之前(變數值的多個字以空格分開)
5 賦值
= 當它的右邊賦值是變數時,這個變數的定義在本條語句之前或之後都可以,即可以遞迴展開。
:= 它右邊賦得值如果是變數,只能使用在這條語句之前定義好的,而不能使用本條語句之後定義的變數,即不可以遞迴展開。
?= 該符號左邊的變數,如果在本條語句之前沒有定義過,則執行本語句,如果已經定義,那麼本語句什麼都不做。
+= 是新增等號後面的值
6 其他符號
@表示在make時不輸出make的資訊(類似windows下的echo off)。
7 關鍵字/命令
include在makefile使用include關鍵字可以把別的makefile包含進來,這很像c語言的#include,被包含的檔案會原模原樣的放在當前檔案的包含位置
-include其表示,無論include過程中出現什麼錯誤,都不要報錯繼續執行。和其它版本make相容的相關命令是sinclude,其作用和這乙個是一樣的。
sinclude同上
8 函式
basename取變數的字首部分
參考資料
[1]makefile中的變數定義
Drupal中常用一些模組
雖然drupal7自帶的一些核心模組就已經可以構建出非常豐富的 但還有一些情況下,核心模組可能缺乏解決特定問題的功能。面對這種情況下,第一步就是在幾千個開發者們提供的個性化模組中搜尋出能夠滿足個人需求的哪乙個。一般來說,當你有某些需求的時候,很可能別人已經有過一樣的需求並且已經提供了很好的解決方法。...
jquery中常用的一些方法
index 的使用 格式 index selector element 返回 number 搜尋匹配的元素,並返回相應元素的索引值,從0開始計數。如果不給 index 方法傳遞引數,那麼返回值就是這個jquery物件集合中第乙個元素相對於其同輩元素的位置。selector 乙個選擇器,代表乙個jqu...
python dict中常用的一些函式
dic1 dic2 dic1.update dic2 update dict dic1呼叫update傳入dic2,如果dic2中的內容在dic1中不存在,那麼直接加入新的價值對到dic1中 如果dic2中的鍵在dic1中已經出現了,那麼就將dic2中鍵所對應的值去覆蓋dic1中的鍵的值 items...