【Makefile的常规编写方法】

常规的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)

猜你喜欢

转载自blog.csdn.net/HuangChen666/article/details/130182948