Makefile simple

From Attie's Wiki
(Difference between revisions)
Jump to: navigation, search
m
m
Line 23: Line 23:
  
 
SRCS:=$(wildcard *.c)
 
SRCS:=$(wildcard *.c)
DEPS:=$(SRCS:.c=.d)
+
DEPS:=$(addprefix .dep/,$(SRCS:.c=.d))
OBJS:=$(SRCS:.c=.o)
+
OBJS:=$(addprefix .obj/,$(SRCS:.c=.o))
  
 
LFLAGS+=$(addprefix -l,$(CLIBS))
 
LFLAGS+=$(addprefix -l,$(CLIBS))
Line 31: Line 31:
 
MAKE+=--no-print-directory
 
MAKE+=--no-print-directory
  
.PHONY: all run clean new
+
.PHONY: all run clean new .%.dir
  
 
all: $(BINOUT)
 
all: $(BINOUT)
Line 43: Line 43:
 
new: clean
 
new: clean
 
@$(MAKE) all
 
@$(MAKE) all
 +
 +
.%.dir:
 +
@if [ ! -d $* ]; then echo "mkdir -p $*"; mkdir -p $*; else echo "!mkdir $*"; fi
 +
@touch $@
  
 
$(BINOUT): $(OBJS)
 
$(BINOUT): $(OBJS)
 
$(GCC) $(LFLAGS) $(filter %.o,$^) -o $@
 
$(GCC) $(LFLAGS) $(filter %.o,$^) -o $@
  
$(OBJS): %.o: %.c %.d
+
$(OBJS): .obj/%.o: %.c ..obj.dir .dep/%.d
 
$(GCC) $(CFLAGS) $*.c -c -o $@
 
$(GCC) $(CFLAGS) $*.c -c -o $@
  
$(DEPS): %.d: %.c makefile
+
$(DEPS): .dep/%.d: %.c ..dep.dir makefile
$(GCC) $(CFLAGS) -MM $*.c -o $@
+
$(GCC) $(CFLAGS) -MM -MT .obj/$*.o $*.c -o $@
  
 
include $(wildcard *.d)
 
include $(wildcard *.d)
 
</source>
 
</source>

Revision as of 00:30, 11 March 2012

This is a really simple makefile, for small projects

It will just build all of the *.c files in this directory into their own object files, and then output a linked binary to BINOUT

There is no tidy housekeeping / folder creating in this makefile

# the output binary name
BINOUT?=main
 
# a cross compile prefix (if you want one)
CROSS_COMPILE?=
 
# standard cflags
CFLAGS:=-Wall -pedantic
# standard lflags
LFLAGS:=
 
# a list of libraries you wish to link against
LIBS:=
 
#-------------------------------#
 
SRCS:=$(wildcard *.c)
DEPS:=$(addprefix .dep/,$(SRCS:.c=.d))
OBJS:=$(addprefix .obj/,$(SRCS:.c=.o))
 
LFLAGS+=$(addprefix -l,$(CLIBS))
 
GCC:=$(CROSS_COMPILE)gcc
MAKE+=--no-print-directory
 
.PHONY: all run clean new .%.dir
 
all: $(BINOUT)
 
run: all
	./$(BINOUT)
 
clean:
	rm -f $(DEPS) $(OBJS) $(BINOUT)
 
new: clean
	@$(MAKE) all
 
.%.dir:
	@if [ ! -d $* ]; then echo "mkdir -p $*"; mkdir -p $*; else echo "!mkdir $*"; fi
	@touch $@
 
$(BINOUT): $(OBJS)
	$(GCC) $(LFLAGS) $(filter %.o,$^) -o $@
 
$(OBJS): .obj/%.o: %.c ..obj.dir .dep/%.d
	$(GCC) $(CFLAGS) $*.c -c -o $@
 
$(DEPS): .dep/%.d: %.c ..dep.dir makefile
	$(GCC) $(CFLAGS) -MM -MT .obj/$*.o $*.c -o $@
 
include $(wildcard *.d)
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox