一.環境變數makefiles和include的區別
1.環境變數makefiles所制定的makefile檔案中的"目標"不會被作為make執行的終極"目標".
2.環境變數所定義的檔案列表是否存在不會導致make錯誤,也不退出
3.在執行make時,首先讀取的是環境變數makefiles所指定的檔案列表,之後才是工作目錄下的makefile.
二.自動環境變數$?
1.$?表示依賴檔案列表中被改變的所有檔案
三.萬用字元的缺陷
1.萬用字元包括"*" "?" "[...]",與bash用法和含義完全相同
2.makefile中萬用字元用在規則的目標,依賴,命令中.除此之外,不能使用萬用字元.只能用函式(如wildcard)代替.
四.目錄搜尋(對工作目錄的搜尋永遠處於最優先地位)
1.環境變數vpath,指定依賴檔案的搜尋路徑.定義vpath時,使用空格或者:講多個目錄隔開
2.關鍵字vpath,為不同型別的檔案(由檔名區分)指定不同的搜尋目錄.
1.vpath pattern dir
所有符合模式pattern的檔案指定搜尋目錄dir,多個目錄使用空格或者:隔開
vpath %.h ../header #表示在makefile中出現的.h檔案,如果當前目錄下找不到,則到../header目錄下尋找
2.vpath pattern
清除之前為符合模式pattern的檔案設定的搜尋路徑
3.vpath
清除所有已被設定的檔案搜尋路徑
五.bash#... 的含義
例子: sh hello.sh a b
$# 是傳給指令碼的引數個數 2
$0 是指令碼本身的名字 hello.sh
$1 是傳遞給該shell指令碼的第乙個引數 a
$2 是傳遞給該shell指令碼的的第二個引數 b
$@ 是傳給指令碼的所有引數列表 "a" "b" #可以做for ... in..
$* 是以乙個單字串顯示所有向指令碼傳遞的引數 "a b"
$$ 是指令碼執行的當前程序id號
$? 是顯示最後命令的退出狀態,0表示沒錯誤,其他值表示有錯誤.
六.makefile 裡3個非常變數
$@ 目標檔案
$^ 所有依賴的檔案
$< 第乙個依賴檔案
七.庫檔案
在編譯選項按照 -lname 規則
manke在執行規則時會在當前目錄下搜尋乙個名字為libname.so的檔案,
如果當前目錄不存在這樣的檔案,則make會繼續按照vpath和vpath指定目錄搜尋
如果還是不存在,make將搜尋系統庫檔案預設目錄,順序是/lib /usr/lib prefix/lib(在linux中為/usr/local/lib,其他系統可能不同)
如果libname.so還是找不到,則make會按照上述順序查詢名字為libname.a的檔案
如新增libdvbstatck.so時,應該是-ldvbstack
八.偽目標
當時用make命令指定此目標時,這個目標所在規則定義的命令.無論目標檔案是否存在都會被無條件執行 .
作用:1.偽目標,不代表乙個真正的檔名,在執行make時可以指定這個目標來執行其所在規則定義的命令.有時也可將偽目標作為乙個標籤.
2.用在make的並行和遞迴執行中.
subdirs= foo bar hee
subdirs:
for dir in $(subdirs);do \
$(make) -c $$dir;\
done
3.當偽目標作為偽目標的依賴時,則相當於子程式,是每次都要執行的
九.如果乙個規則沒有命令 或者 依賴,並且他的目標不是乙個存在的檔名.在執行次規則時,目標總會被認為是最新的.
十.makefile的特殊目標
.phony 他的所有依賴都被當做偽目標
.suffixes 的所有依賴指出了
Makefile學習記錄(三)
1.在專案編譯中想將幾個靜態庫合併成乙個靜態庫 嘗試 ar crv a.a b.a c.a 然後使用 gcc o test la ld 報錯找不到b.a中包含的函式 需要先將靜態庫解壓後在合併 ar x a.a ar x b.a ar x c.a ar crv a.a o ar這個壓縮指令可以理解為...
makefile 語法記錄
是最基本的賦值 是覆蓋之前的值 是如果沒有被賦值過就賦予等號後面的值 是新增等號後面的值 c.o 這句話的意思就是 o c 也就是說,所有的.o檔案,依賴於對應的.c檔案.c.o 字尾規則。它告訴make 後面的命令 使用從.c檔案生成.o 目標檔案除去字尾的部分,如果目標是xx.o,那麼 xx 依...
Makefile編寫記錄
近期學習 linux 需要使用 makefile,網上蒐羅了很多這方面的資料,所裡在這裡做乙個整理。1 靜態模式 看乙個例子 objects foo.o bar.o all objects objects o c cc c cflags o 上面的例子中,指明了我們的目標從 object 中獲取,o...