Makefile 入門指南
最簡單的例子
單文件編譯
假設我們有一個main.cpp文件,最簡單的Makefile如下:
# 最簡單的單文件編譯
# 目標:依賴文件
main: main.cpp# 編譯命令g++ main.cpp -o main
使用步驟:
- 將上述內容保存為名為Makefile的文件(注意:文件名必須為Makefile,首字母大寫)
- 確保main.cpp文件存在于同一目錄下
- 打開終端/命令行,導航到該目錄
- 運行命令
make
(這將自動查找并執行Makefile) - 程序會生成可執行文件
main
- 運行程序:
- Linux/Mac:
./main
- Windows:
main.exe
- Linux/Mac:
注意事項:
- Makefile中的命令必須以Tab開頭,不能使用空格
- 每次修改源文件后,需要重新運行
make
命令
添加變量
我們可以添加變量使Makefile更靈活:
# 使用變量的單文件編譯
CC = g++
CFLAGS = -Wallmain: main.cpp$(CC) $(CFLAGS) main.cpp -o main
多文件編譯
當項目有多個源文件時:
# 多文件編譯示例
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) main.o utils.o -o programmain.o: main.cpp$(CC) $(CFLAGS) -c main.cpputils.o: utils.cpp$(CC) $(CFLAGS) -c utils.cppclean:rm -f *.o program
進階功能
使用模式規則
# 使用模式規則簡化
CC = g++
CFLAGS = -Wallprogram: main.o utils.o$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program
自動查找源文件
# 自動查找所有.cpp文件
CC = g++
CFLAGS = -Wall
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp,%.o,$(SRC))program: $(OBJ)$(CC) $(CFLAGS) $^ -o $@%.o: %.cpp$(CC) $(CFLAGS) -c $<clean:rm -f *.o program