Skip to content

Instantly share code, notes, and snippets.

@hidva
Created September 28, 2016 04:22
Show Gist options
  • Save hidva/f76fb536d802347c3c94e40717c667a4 to your computer and use it in GitHub Desktop.
Save hidva/f76fb536d802347c3c94e40717c667a4 to your computer and use it in GitHub Desktop.
Makefile 模板
GCC := gcc
GXX := g++
project_path := $(shell pwd)
BIN :=
C_SRC :=
CXX_SRC :=
CFLAGS :=
CXXFLAGS :=
LDFLAGS :=
LDFLAGS += -pthread
### 以下不需要配置 ###
all:
OBJ_DIR := objs
DEP_DIR := $(OBJ_DIR)/deps
BIN_DIR := bin
C_OBJS := $(C_SRC:.c=.c.o)
CXX_OBJS := $(foreach ccfile,$(CXX_SRC),$(ccfile).o)
ALL_DEPS := $(C_OBJS:.o=.dep)
ALL_DEPS += $(CXX_OBJS:.o=.dep)
C_OBJS := $(foreach var,$(C_OBJS),$(OBJ_DIR)/$(var))
CXX_OBJS := $(foreach var,$(CXX_OBJS),$(OBJ_DIR)/$(var))
ALL_DEPS := $(foreach var,$(ALL_DEPS),$(DEP_DIR)/$(var))
all: $(BIN_DIR)/$(BIN)
include $(ALL_DEPS)
$(DEP_DIR)/%.c.dep: %.c
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [依赖生成]: $< --- $@
@$(GCC) -E -M -MQ $(OBJ_DIR)/$*.c.o -MQ $@ -MF $@ $< $(CFLAGS)
$(DEP_DIR)/%.cc.dep: %.cc
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [依赖生成]: $< --- $@
@$(GXX) -E -M -MQ $(OBJ_DIR)/$*.cc.o -MQ $@ -MF $@ $< $(CXXFLAGS)
$(DEP_DIR)/%.cpp.dep: %.cpp
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [依赖生成]: $< --- $@
@$(GXX) -E -M -MQ $(OBJ_DIR)/$*.cpp.o -MQ $@ -MF $@ $< $(CXXFLAGS)
$(OBJ_DIR)/%.c.o: %.c
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [编译]: $< --- $@
@$(GCC) -c $< -o $@ $(CFLAGS)
$(OBJ_DIR)/%.cc.o: %.cc
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [编译]: $< --- $@
@$(GXX) -c $< -o $@ $(CXXFLAGS)
$(OBJ_DIR)/%.cpp.o: %.cpp
@if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi
@echo [编译]: $< --- $@
@$(GXX) -c $< -o $@ $(CXXFLAGS)
$(BIN_DIR)/$(BIN): $(C_OBJS) $(CXX_OBJS)
@if [ ! -d $(BIN_DIR) ] ; then mkdir -p $(BIN_DIR); fi
@echo [链接]: $^ --- $@
ifeq ($(strip $(CXX_SRC)),)
@$(GCC) -o $(BIN_DIR)/$(BIN) $(C_OBJS) $(CXX_OBJS) $(LDFLAGS)
else
@$(GXX) -o $(BIN_DIR)/$(BIN) $(C_OBJS) $(CXX_OBJS) $(LDFLAGS)
endif
clean:
-@rm -rv $(BIN_DIR) $(OBJ_DIR)
.PHONY: all clean
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment