Makefile示例

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),)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值