在一些大的工程中,有大量的原始檔,我們通常的做法是把這許多的原始檔分類,並存放在不同的目錄中。所以,當make需要去找尋檔案的依賴關係時,你可以在檔案前加上路徑,但最好的方法是把乙個路徑告訴make,讓make在自動去找。
makefile檔案中的特殊變數「vpath」就是完成這個功能的,如果沒有指明這個變數,make只會在當前的目錄中去找尋依賴檔案和目標檔案。如果定義了這個變數,那麼,make就會在當當前目錄找不到的情況下,到所指定的目錄中去找尋檔案了。
vpath = src:../headers
上面的的定義指定兩個目錄,「src」和「../headers」,make會按照這個順序進行搜尋。目錄由「冒號」分隔。(當然,當前目錄永遠是最高優先搜尋的地方)
另乙個設定檔案搜尋路徑的方法是使用make的「vpath」關鍵字(注意,它是全小寫的),這不是變數,這是乙個make的關鍵字,這和上面提到的那個vpath變數很類似,但是它更為靈活。它可以指定不同的檔案在不同的搜尋目錄中。這是乙個很靈活的功能。它的使用方法有三種:
1、vpath ; ;
為符合模式;的檔案指定搜尋目錄;。
2、vpath ;
清除符合模式;的檔案的搜尋目錄。
3、vpath
清除所有已被設定好了的檔案搜尋目錄。
vapth使用方法中的;需要包含「%」字元。「%」的意思是匹配零或若干字元,例如,「%.h」表示所有以「.h」結尾的檔案。;指定了要搜尋的檔案集,而;則指定了;的檔案集的搜尋的目錄。例如:
vpath %.h ../headers
該語句表示,要求make在「../headers」目錄下搜尋所有以「.h」結尾的檔案。(如果某檔案在當前目錄沒有找到的話)
我們可以連續地使用vpath語句,以指定不同搜尋策略。如果連續的vpath語句中出現了相同的;,或是被重複了的;,那麼,make會按照vpath語句的先後順序來執行搜尋。如:
vpath %.c foo
vpath % blish
vpath %.c bar
其表示「.c」結尾的檔案,先在「foo」目錄,然後是「blish」,最後是「bar」目錄。
vpath %.c foo:bar
vpath % blish
而上面的語句則表示「.c」結尾的檔案,先在「foo」目錄,然後是「bar」目錄,最後才是「blish」目錄。
makefile學習筆記 書寫規則 規則舉例
20180413 makefile學習筆記 書寫規則 規則舉例 規則包含兩個部分,乙個是依賴關係,乙個是生成目標的方法。在makefile中,規則的順序是很重要的,因為,makefile中只應該有乙個最終目標,其他的目標都是被這個目標所連帶出來的,所以一定要讓make知道你的最終目標是什麼。一般來說...
makefile學習筆記 書寫規則 偽目標
20180416 makefile學習筆記 書寫規則 偽目標 下面的例子中的乙個 clean 的目標,就是乙個 偽目標 clean rm o temp clean的作用是當我們生成了許多編譯檔案時,我們應該提供乙個清楚他們的 目標 以備完整地重編譯而用 以 make clean 來使用該目標 因為,...
Makefile檔案編寫規則
makefile 中包含五種內容 顯式規則,隱式規則,變數定義,指令 directive 和注釋。1.顯式規則 描述如何生成規則的目標,它列出了目標依賴的檔案,指定了產生或更新目標的命令。2.隱式規則 描述如何生成基於檔名的一類檔案,說明目標可能依賴於和其檔名類似的檔案,指定了相應的命令。3.指令 ...