1. Makefile
环境:Windows + Mingw64(sjlj)
TARGET32 := Test.exe
TARGET64 := Test64.exe
LDLIBS32 := -lthread
LDLIBS64 := -lthread
include $(Makefile.mk)
2. Makefile.mk
MAKE := mingw32-make
CC := gcc
CXX := g++
RM := rd /s /q
## Include Dir
INCLUDE-DIR :=
INCLUDE = $(if $(INCLUDE-DIR),$(addprefix -I,$(INCLUDE-DIR)),)
TARGET32 := Test.exe
TARGET64 ?= $(TARGET32)
TARGET32-DIR := Release
TARGET64-DIR := $(addprefix x64\,$(TARGET32-DIR))
OBJDIR = $(TARGET_DIR)
ifeq "$(MODE)" "m32"
TARGET_ARCH = -m32 -fPIC
TARGET_DIR = $(TARGET32-DIR)
TARGETS = $(addprefix $(TARGET_DIR)\,$(TARGET32))
LIBDIR = $(addprefix -L,$(LIBDIR32))
LDLIBS = $(LDLIBS32)
endif
ifeq "$(MODE)" "m64"
TARGET_ARCH = -m64 -fPIC
TARGET_DIR = $(TARGET64-DIR)
TARGETS = $(addprefix $(TARGET_DIR)\,$(TARGET64))
LIBDIR = $(addprefix -L,$(LIBDIR64))
LDLIBS = $(LDLIBS64)
endif
## C Pre Processor Options (Multi-thread)
## CPPFLAGS := -pthread
## C Compile Options
CFLAGS :=
## C++ Compile Options
CXXFLAGS :=
## Link Options (Produce Dynamic Library)
## LDFLAGS := -shared
CPPFLAGS += $(INCLUDE)
## Debug Option
ifeq ($(MAKECMDGOALS), debug)
CFLAGS += -g
CXXFLAGS += -g
TARGET32-DIR = Debug
endif
SRC = $(wildcard *.c)
SRCXX = $(wildcard *.cpp)
OBJNAME = $(SRC:.c=.o) $(SRCXX:.cpp=.o)
OBJ = $(addprefix $(OBJDIR)\, $(OBJNAME))
.PHONY: default
default:
$(MAKE) all
.PHONY: release debug
release : $(TARGETS)
debug : $(TARGETS)
.PHONY: clean cleanfull
clean:
@-$(RM) Release 2> nul
@-$(RM) Debug 2> nul
@-$(RM) x64 2> nul
$(TARGETS) : $(OBJ)
$(CXX) $(LDFLAGS) $(TARGET_ARCH) $^ $(LIBDIR) $(LDLIBS) -o $@
$(OBJDIR)\\%.o : %.c
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
$(OBJDIR)\\%.o : %.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<
$(OBJDIR):
@mkdir "$@"
.PHONY: all x64 both
both : all x64
all :
$(MAKE) MODE=m32 release
x64 :
$(MAKE) MODE=m64 release
.PHONY: debug x64.debug both.debug
all.debug:
$(MAKE) MODE=m32 debug
x64.debug:
$(MAKE) MODE=m64 debug
both.debug: all.debug x64.debug
DEPEND-DIR = $(OBJDIR)
DEPEND = $(subst .c,.d,$(addprefix $(DEPEND-DIR)\,$(SRC))) $(subst .cpp,.d,$(addprefix $(DEPEND-DIR)\,$(SRCXX)))
$(DEPEND-DIR)\\%.d : %.c
$(CC) -MM $< > $@
$(DEPEND-DIR)\\%.d : %.cpp
$(CC) -MM $< > $@
include $(if $(MODE),$(DEPEND) $(OBJDIR),)