gnu的make很強大,它可以自動推導檔案以及檔案依賴關係後面的命令,於是我們就沒必要去在每乙個[.o]檔案後都寫上類似的命令,因為,我們的make會自動識別,並自己推導命令。
只要make看到乙個[.o]檔案,它就會自動的把[.c]檔案加在依賴關係中,如果make找到乙個whatever.o,那麼whatever.c,就會是whatever.o的依賴檔案。並且 cc -c whatever.c 也會被推導出來,於是,我們的makefile再也不用寫得這麼複雜。我們的是新的makefile又出爐了。
objects = main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.phony : clean
clean :
rm edit $(objects)
這種方法,也就是make的「隱晦規則」。上面檔案內容中,「.phony」表示,clean是個偽目標檔案。
關於更為詳細的「隱晦規則」和「偽目標檔案」,我會在後續給你一一道來。
makefile 可以自動推導生成 o規則
cc gcc cpp g rm rm rf debug flag dbg enable 0 source file path src path target exec file name target exe get all source files srcs wildcard src path c...
自動型別推導
c 03及之前的標準種,auto放在變數宣告之前,宣告變數為自動變數 還有一種為靜態變數 static變數 的儲存策略。但是這個關鍵字常省略不寫。c 11中,auto關鍵字放在變數之前,作用是在宣告變數的時候根據變數初始值的型別自動為此變數選擇匹配的型別。注意點 auto a1 10 正確 auto...
makefile自動變數
下面是所有的自動化變數及其說明 表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,就是匹配於 目標中模式定義的集合。僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果乙個目標是 foo.a bar.o 那麼,就是 bar.o 就是 foo.a 如果目標不是函式庫檔案 unix 下是...