Concept:
一般來說,當我們輸入 make 命令,會執行以下內容:
- make 會在當前目錄下按順序找尋文件名為 GNUmakefile、makefile 或 Makefile 的文件。
- 在 makefile 文件中的找到第一個目標文件(target),並把這個文件作為最終的目標文件。
- target ... : prerequisites ...
- command
- 解釋:若後面的prerequisites比target還要新,才會執行下面的command
- 如果沒找到或目標文件所依賴的文件,或修改時間要比目標文件新,則 make 將執行後面所定義的命令來生成這個文件,如此遞迴下去找到文件彼此的依賴關係,直到最終編譯出第一個目標文件。
自動化變數
在一些 make 中常使用自動化變數來簡寫規則:
- $@:目前的目標(Target)項目名稱。
- $<:代表目前的相依性項目。
- $*:代表目前的相依性項目,但不含副檔名。
- $?:代表需要重建(被修改)的相依性項目。
- $^:表示規則中的所有條件,組成一個列表,以空格分隔。
把產生執行檔的方式拆成了兩個步驟
- 先從 .c 檔生成 .o
- g++ -c bar.cpp ( -c :編譯但不進行鏈結 )
- 再從 .o 連結成執行檔
- gcc -o test db.o op.o / gcc db.c op.c -o test ( 這兩個例子中 -o 的位置都可以 )
CLFLAGS/CPPFLAGS:
放 .h 檔的include路徑。用於C PreProcessor前處理器。
CXXFLAGS:
用於C++ PreProcessor前處理器。
-I:include搜尋 *.h 的資料夾路徑
-L:搜尋 Lib 的資料夾路徑