目录
Makefile模板
CC = gcc
LD = $(CC)
TARGET = $(notdir $(CURDIR))
SRC_DIR = .
INCLUDE_DIR += .
C_FLAGS = -g -Wall
LD_FLAFS =
LD_LIBS =
INCLUDES = -I$(INCLUDE_DIR)
ifeq ($(CC), g++)
TYPE = cpp
SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
else
TYPE = c
SRCS += $(wildcard $(SRC_DIR)/*.$(TYPE))
OBJS += $(patsubst %.$(TYPE), %.o, $(SRCS))
endif
all : $(TARGET)
@echo "Builded target:" $^
@echo "Done"
$(TARGET) : $(OBJS)
@echo "Linking" $@ "from" $^ "..."
$(LD) -o $@ $^ $(LD_FLAGS) $(LD_LIBS)
@echo "Link finished\n"
$(OBJS) : %.o:%.$(TYPE)
@echo "Compiling" $@ "from" $< "..."
$(CC) -c -o $@ $< $(C_FLAGS) $(INCLUDES)
@echo "Compiled finished\n"
.PHONY : clean cleanobj
clean : cleanobj
@echo "Remove all executable file"
rm -f $(TARGET)
cleanobj :
@echo "Remove binary files"
rm -f *.o
用法
编译C程序:
make
编译C++程序:
make CC=g++
其他
TARGET
指定生成的可执行文件名SRC_DIR
指定源文件(.c .cpp)文件的路径INCLUDE_DIR
指定头文件路径C_FLAGS
指定编译参数选项LD_FLAFS
指定链接参数选项LD_LIBS =
指定链接库
清除生成的文件:
# 清空全部生成文件
make clean
# 清空生成的中间文件
make cleanobj