1. 程式人生 > >makefile入門-初步瞭解

makefile入門-初步瞭解

自己開始學習makefile是由於VScode配置工程檔案,看別人的配置不是很懂,於是決定入門學習下makefile。

先來說說makefile是做什麼用的:對於只有一個或兩三個原始檔的程式,我們可以直接用g++ 命令進行編譯連結。例如以下程式,func.cpp func.hpp test.cpp 均在同一目錄下

編譯:開啟cmd 輸入:g++ -c  test.cpp func.cpp 

連結:在cmd中輸入 :g++ -o test test.o func.o 即可

上面的程式比較簡單,原始檔很少,而且均在同一個資料夾中,使用g++進行編譯連結還比較簡單,但是當工程比較複雜,原始檔很多並且放在不同的資料夾中時,再使用g++命令將變得很複雜。

以上面的程式為例,將檔案 func.cpp func.hpp 放入func資料夾中,如下圖所示

 

此時利用g++ 進行編譯需要輸入命令:g++ -c test.cpp ./func/func.cpp -I./func ,編譯後 test.o以及func.o將出現在同一目錄下。

使用以上命令對程式進行編譯連結並沒有問題,但是當工程原始檔越來越多,目錄結構越來越複雜時,每次輸入g++ 命令將變得十分繁瑣和複雜,影響工作效率,為此,makefile出現了,準確的說,makefile只是一個文字檔案,makefile通過描述各個工程檔案間的依賴關係,利用g++實現了工程的自動化編譯。

對於上面的例子,使用makefile進行編譯(本人使用的是mingw64),新建makefile檔案,程式碼如下:

test:./obj/test.o ./obj/func.o
  g++ -o test ./obj/test.o ./obj/func.o

./obj/test.o:test.cpp ./func/func.hpp
  g++ -c test.cpp -o ./obj/test.o -I./func/

./obj/func.o:./func/func.cpp ./func/func.hpp
  g++ -c ./func/func.cpp -o ./obj/func.o

.PHONY:clean
clean:
  del .\obj\*.o test.exe

在當前目錄下開啟cmd ,鍵入mingw32-make 即可對工程進行編譯