make是乙個工具,用來構建和管理軟體享目。之前是個編譯乙個hello.c的程式需要一條gcc命令。但是乙個軟體工程有大量的原始檔需要gcc編譯,手工逐條敲命令編譯顯然是低效且浪費時間的。
make能夠使整個軟體工程的編譯,鏈結只需要乙個命令就可以完成。
makefile檔案中記錄了一系列規則
target:prerequisites
command
target:目標檔案
prerequisites:目標檔案的依賴
command:產生目標檔案的命令
三者合一就是一條規則
hello:main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o: main.c
gcc -c main.c
func1.o: func1.c
gcc -c func1.c
func2.o: func2.c
gcc -c func2.c
.phony:clean
clean:
rm -f hello.o main.o func1.o func2.o
經過測試make只能識別檔名為makefile或者makefile的檔案.phony關鍵字
可以用.phony關鍵字宣告偽目標,為目標就是只有執行動作,沒有依賴的目標。
定義makefile變數
obj = main.o func1.o func2.o func3.o
hello:$(obj)
gcc $(obj) -o hello
makefile中系統預設的自動化變數hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
等價於hello:main.o func1.o func2.o
gcc $^ -o $@
mailefile中的注釋
「#」可以用來注釋當前行
嵌入式Linux學習歷程 Makefile
makefile用來完成以下功能 1 如果工程沒有編譯過,那麼工程中的所有.c檔案都要被編譯並且鏈結成可執行檔案。2 如果工程中只有個別c檔案被修改了,那麼只編譯這些被修改的c檔案。3 如果工程的標頭檔案被修改了,那麼需要編譯所有引用這個標頭檔案的c檔案,並且鏈結成可執行檔案。例 乙個工程 通過鍵盤...
嵌入式學習Makefile 偽目標
偽目標makefile的乙個重要的特殊目標。偽目標 它不代表乙個真正的檔名,在執行make時可以指定這個目標來執行其所在規則定義的命令,也可以將乙個偽目標稱為標籤。使用偽目標有兩點原因 1 避免在我們的makefile中定義的只執行命令的目標 就是說定義該目標的目的是為了執行一系列的命令,比如cle...
嵌入式筆記之Makefile
1 src shell ls c 2 objs patsubst c,o,src 3 test objs 4 gcc o 5 o c 6 gcc c o 7 cleam 8 rm f test o 注 在makefile編寫規則中,表示規則的目標檔名,表示所有不重複的依賴檔名,表示第乙個依賴檔名。假...