120 lines
2.3 KiB
Plaintext
120 lines
2.3 KiB
Plaintext
LIBDIR = ../lib
|
|
BINDIR = ../bin
|
|
|
|
#
|
|
# The full path of output lib file (e.g. ../lib/libapp.a).
|
|
#
|
|
LIB = $($(APP)_LIB)
|
|
|
|
#
|
|
# The full path of output executable file (e.g. ../bin/app.exe).
|
|
#
|
|
EXE = $($(APP)_EXE)
|
|
|
|
#
|
|
# Source directory
|
|
#
|
|
SRCDIR = $($(APP)_SRCDIR)
|
|
|
|
#
|
|
# SRCEXT is .c
|
|
# SRCS is file.c
|
|
# FULL_SRCS is ../src/app/file.c
|
|
#
|
|
SRCEXT = $($(APP)_SRCEXT)
|
|
SRCS = $($(APP)_SRCS)
|
|
FULL_SRCS = $(foreach file, $(SRCS), $(SRCDIR)/$(file))
|
|
|
|
|
|
#
|
|
# Output directory for object files (i.e. output/target)
|
|
#
|
|
OBJDIR = ./output/$(app)-$(TARGET)
|
|
|
|
#
|
|
# OBJS1 is ./output/target/file.c
|
|
# OBJS is ./output/target/file.o
|
|
#
|
|
OBJS1 = $(foreach file, $(SRCS), $(OBJDIR)/$(file))
|
|
OBJS = $(OBJS1:%$(SRCEXT)=%$(OBJEXT))
|
|
OBJDIRS := $(sort $(foreach file, $(SRCS), $(dir $(OBJDIR)/$(file))))
|
|
|
|
|
|
#
|
|
# When generating dependency (gcc -MM), ideally we use only either
|
|
# CFLAGS or CXXFLAGS (not both). But I just couldn't make if/ifeq to work.
|
|
#
|
|
DEPFLAGS = $($(APP)_CXXFLAGS) $($(APP)_CFLAGS)
|
|
|
|
print_common:
|
|
@echo "###"
|
|
@echo "### DUMPING MAKE VARIABLES (I WON'T DO ANYTHING ELSE):"
|
|
@echo "###"
|
|
@echo APP=$(APP)
|
|
@echo SRCEXT=$(SRCEXT)
|
|
@echo OBJDIR=$(OBJDIR)
|
|
@echo OBJS=$(OBJS)
|
|
@echo SRCDIR=$(SRCDIR)
|
|
@echo FULL_SRCS=$(FULL_SRCS)
|
|
@echo $(APP)_CFLAGS=$($(APP)_CFLAGS)
|
|
@echo $(APP)_CXXFLAGS=$($(APP)_CXXFLAGS)
|
|
@echo $(APP)_LDFLAGS=$($(APP)_LDFLAGS)
|
|
@echo DEPFLAGS=$(DEPFLAGS)
|
|
|
|
print_bin: print_common
|
|
@echo EXE=$(EXE)
|
|
@echo BINDIR=$(BINDIR)
|
|
|
|
print_lib: print_common
|
|
@echo LIB=$(LIB)
|
|
@echo LIBDIR=$(LIBDIR)
|
|
|
|
$(LIB): $(LIBDIR) $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
|
|
$(AR) $(LIB) $(OBJS)
|
|
$(RANLIB) $(LIB)
|
|
|
|
$(EXE): $(BINDIR) $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
|
|
$(LD) $(LDOUT) $(EXE) $(OBJS) $($(APP)_LDFLAGS)
|
|
|
|
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.c
|
|
$(CC) $($(APP)_CFLAGS) $< $(CCOUT) $@
|
|
|
|
$(OBJDIR)/%$(OBJEXT): $(SRCDIR)/%.cpp
|
|
$(CC) $($(APP)_CXXFLAGS) $< $(CCOUT) $@
|
|
|
|
#$(OBJDIR):
|
|
# $(MKDIR) $(OBJDIR)
|
|
$(OBJDIRS):
|
|
$(MKDIR) $@
|
|
|
|
$(LIBDIR):
|
|
$(MKDIR) $(LIBDIR)
|
|
|
|
$(BINDIR):
|
|
$(MKDIR) $(BINDIR)
|
|
|
|
clean:
|
|
$(RM) -r $(OBJDIR)/*
|
|
$(RMDIR) $(OBJDIR)
|
|
|
|
realclean: clean
|
|
$(RM) $(LIB) $(EXE)
|
|
$(RM) .$(app).depend
|
|
|
|
depend:
|
|
$(RM) .$(app).depend
|
|
for F in $(FULL_SRCS); do \
|
|
echo -n $(OBJDIR)/ >> .$(app).depend; \
|
|
if gcc -MM $(DEPFLAGS) $$F >> .$(app).depend; then \
|
|
true; \
|
|
else \
|
|
echo 'err:' >> .$(app).depend; \
|
|
exit 1; \
|
|
fi; \
|
|
done
|
|
|
|
dep: depend
|
|
|
|
-include .$(app).depend
|
|
|