常规的Makefile编写格式
CXX = gcc
TARGET = aa
SRC = $(wildcard *.c) # 所有的.c文件 wildcard 让 * 有了通配符的功能
OBJ = $(patsubst %.c, %.o, $(SRC)) # 将%.c 替换成对应的 %.o文件,%.c是 $(SRC) 中以“空格”、“Tab”或“回车”、“换行”分隔的每一个字符串
CXXFLASS = -c -Wall # 编译选项:显示所有的warning
$(TARGET) : $(OBJ)
$(CXX) -o $@ $^
%.o : %.c
$(CXX) $(CXXFLASS) -o $@ $<
.PHONY : clean
clean:
rm -f $(OBJ) $(TARGET)
解释:
·CXX = gcc :表示编译解释器是 gcc
·TARGET = aa :表示编译后生成的文件名
·SRC : 表示所有 .c 源文件
wildcard 使 * 有了通配符的作用
·OBJ : 表示所有 .c 源文件对应的 .o 文件
将%.c 替换成对应的 %.o文件,%.c是 $(SRC) 中以“空格”、“Tab”
或“回车”、“换行”分隔的每一个字符串
·CXXFLASS:表示编译选项
-c 表示只编译不链接,只生成.o文件
-Wall 表示显示所有警告
$(TARGET) : $(OBJ)
$(CXX) -o $@ $^
$(TARGET) : 目标文件
$(OBJ) : 依赖文件
$@ : 目标文件的完整名称
$^ :所有不重复的目标依赖文件,以空格分开
%.o : %.c
$(CXX) $(CXXFLASS) -o $@ $<
$< : 第一个依赖文件的名称
.PHONY : clean
clean:
rm -f $(OBJ) $(TARGET)
.PHONY : 伪目标
如果该文件夹下有个 clean 文件,如果执行 make clean ,则会忽视 clean 文件,直接执行 rm -f $(OBJ) $(TARGET)