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編寫規則中,「$@」表示規則的目標檔名,「$^」表示所有不重複的依賴檔名,「$<」表示第乙個依賴檔名。
假設現在目錄下有main.c, makefile, sub.c, sub.h四個檔案,
第1行:src變數的值為main.c和sub.c;
第2行:objs變數的值為main.o和sub.o;
第5、6行:用來生成main.o和sub.o的規則;
對main.o來說就是:
main.o: main.c
gcc -c -o main.o main.c
對sub.o來說就是:
sub.o: sub.c
gcc -c -o sub.o sub.c
第3行:即test:main.o sub.o;
第4行:根據第6行生成的main.o和sub.o檔案來生成可執行檔案test;
第7、8行:清理main.o和sub.o檔案。
嵌入式學習Makefile
make是乙個工具,用來構建和管理軟體享目。之前是個編譯乙個hello.c的程式需要一條gcc命令。但是乙個軟體工程有大量的原始檔需要gcc編譯,手工逐條敲命令編譯顯然是低效且浪費時間的。make能夠使整個軟體工程的編譯,鏈結只需要乙個命令就可以完成。makefile檔案中記錄了一系列規則 targ...
嵌入式Linux學習歷程 Makefile
makefile用來完成以下功能 1 如果工程沒有編譯過,那麼工程中的所有.c檔案都要被編譯並且鏈結成可執行檔案。2 如果工程中只有個別c檔案被修改了,那麼只編譯這些被修改的c檔案。3 如果工程的標頭檔案被修改了,那麼需要編譯所有引用這個標頭檔案的c檔案,並且鏈結成可執行檔案。例 乙個工程 通過鍵盤...
嵌入式學習Makefile 偽目標
偽目標makefile的乙個重要的特殊目標。偽目標 它不代表乙個真正的檔名,在執行make時可以指定這個目標來執行其所在規則定義的命令,也可以將乙個偽目標稱為標籤。使用偽目標有兩點原因 1 避免在我們的makefile中定義的只執行命令的目標 就是說定義該目標的目的是為了執行一系列的命令,比如cle...