diff options
| -rw-r--r-- | Makefile | 91 |
1 files changed, 49 insertions, 42 deletions
@@ -1,56 +1,63 @@ -CC=gcc -CFLAGS=-std=c17 -Wall -Werror -g -test_framework=criterion - -# Directories -bin_dir=bin -obj_dir=obj -src_dir=src -test_dir=tests - -# Files -src_files=$(wildcard $(src_dir)/*.c) -obj_files=$(patsubst $(src_dir)/%.c, $(obj_dir)/%.o, $(src_files)) -test_files=$(wildcard $(test_dir)/*.c) -test_bins=$(patsubst $(test_dir)/%.c, $(bin_dir)/%, $(test_files)) - -# Actions -.PHONY: all -all: test +proj:=dslibc -.PHONY: test -test: $(test_bins) - @for test in $(test_bins); do ./$$test --verbose --jobs 1 ; done +# COMPILER OPTIONS +CC:=gcc +CFLAGS:=-std=c17 -Wall -Werror -g + +# DIRECTORIES +objdir:=obj +srcdir:=src +bindir:=bin +testdir:=test + +# FILES +srcfiles:=$(wildcard $(srcdir)/*.c) +objfiles=$(patsubst $(srcdir)/%.c,$(objdir)/%.o, $(srcfiles)) +objfiles:=$(filter-out $(objdir)/main.o, $(objfiles)) +testfiles:=$(wildcard $(testdir)/*tests.c) + +bin:=$(bindir)/$(proj) +testbins:=$(patsubst $(testdir)/%.c,$(bindir)/%, $(testfiles)) + +# TARGETS + +.PHONY: build +build: $(objdir) $(bindir) $(bin) .PHONY: clean clean: - rm -r $(bin_dir) $(obj_dir) + -rm -r $(bindir) $(objdir) + +.PHONY: test +test: build $(testbins) + @for test in $(testbins); do ./$$test; done -.PHONY: demo -demo: $(bin_dir)/demo +.phony: run +run: build + @$(bin) .PHONY: info info: - @printf "src_files: %s\n" "$(src_files)" - @printf "obj_files: %s\n" "$(obj_files)" - @printf "test_files: %s\n" "$(test_files)" - @printf "test_bins: %s\n" "$(test_bins)" - -# Make Directories -$(obj_dir): - mkdir $@ + @echo "srcfiles: $(srcfiles)" + @echo "objfiles: $(objfiles)" + @echo "testfiles: $(testfiles)" + @echo "testbins: $(testbins)" -$(bin_dir): - mkdir $@ +# Create binary +$(bin): $(objfiles) $(srcdir)/main.c + $(CC) $(CFLAGS) $^ -o $@ -# Make object files -$(obj_dir)/%.o: $(src_files) $(obj_dir) +# Create object files +$(objdir)/%.o: $(srcdir)/%.c $(CC) $(CFLAGS) -o $@ -c $< # Make test binaries -$(bin_dir)/%: $(bin_dir) $(test_files) $(obj_files) - $(CC) $(CFLAGS) -o $@ -l $(test_framework) $(filter-out $<,$^) +$(bindir)/%: $(testfiles) $(objfiles) + $(CC) $(CFLAGS) -o $@ -l criterion $^ -# Make demo executable -$(bin_dir)/demo: $(bin_dir) $(obj_files) demo/main.c - $(CC) $(CFLAGS) -o $@ $(filter-out $<,$^) +# Create Directories +$(objdir): + mkdir $@ + +$(bindir): + mkdir $@ |
