Makefile 编译c和c++的
#TARGET : 目标文件
#OBJ_DIR_THIS : 中间文件存放目录
#COMPILE.cpp和COMPILE.c : 编译
#LINK.cpp和LINK.c : 链接
#SOURCE_PATHS : 源码.c和.cpp存放目录,多个目录用空格隔开
#INCLUDE_PATHS : 文件夹.h存放目录,多个目录用空格隔开
#foreach : 用于遍历多个目录
#wildcard : 用于遍历指定目录的指定文件
#RELOBJFILES_cpp和RELOBJFILES_c : .cpp和.c编译后对应的.o文件
TARGET = test
CC=gcc
CPLUS=g++
C_FLAGS = -Wall -g
CPP_FLAGS= -I./
#源文件存放目录
SOURCE_PATHS = .
#头文件包含
INCLUDE_PATHS = .
############################ 请不要修改以下内容 #######################################
LD_FLAGS =
COMPILE.cpp = $(CPLUS) $(C_FLAGS) $(CPP_FLAGS) -c
LINK.cpp = $(CPLUS)
COMPILE.c = $(CC) $(C_FLAGS) $(CPP_FLAGS) -c
LINK.c = $(CC)
RELCFLAGS =
SOURCES_cpp = $(foreach dir,$(SOURCE_PATHS),$(wildcard $(dir)/*.cpp))
SOURCES_c = $(foreach dir,$(SOURCE_PATHS),$(wildcard $(dir)/*.c))
HEADERS = $(foreach dir,$(INCLUDE_PATHS),$(wildcard $(dir)/*.h))
RELOBJFILES_cpp = $(SOURCES_cpp:%.cpp=%.o)
RELOBJFILES_c = $(SOURCES_c:%.c=%.o)
OBJ_DIR_PATHS = $(foreach dir,$(SOURCE_PATHS), $(OBJ_DIR_THIS)/$(dir))
.PHONY: all clean
all: $(TARGET)
$(TARGET): $(RELOBJFILES_cpp) $(RELOBJFILES_c)
# @echo $(SOURCES_cpp)
# @echo $(SOURCES_c)
# @echo $(RELOBJFILES_cpp)
# @echo $(RELOBJFILES_c)
$(LINK.cpp) -o $@ $^ $(LD_FLAGS)
@echo === make ok, output: $(TARGET) ===
$(RELOBJFILES_cpp):%.o:%.cpp $(HEADERS)
@echo $(SOURCES_cpp)
$(COMPILE.cpp) $(RELCFLAGS) -o $@ $<
$(RELOBJFILES_c): %.o:%.c $(HEADERS)
$(COMPILE.c) $(RELCFLAGS) -o $@ $<
clean:
-$(RM) -rf $(TARGET) $(RELOBJFILES_cpp) $(RELOBJFILES_c) *.d