История изменений
Исправление xaizek, (текущая версия) :
MAKEFLAGS = -j 1
CC = gcc
DOBJ = exe/obj/
DMOD = exe/mod/
DEXE = exe/
MKDIRS = $(DOBJ) $(DMOD) $(DEXE)
#auxiliary variables
COTEXT = "Compile $(<F)"
LITEXT = "Assemble $@"
DTESTS=src/tests/
TESTS=$(basename $(notdir $(wildcard $(DTESTS)/*.c)))
TESTSOBJ=$(addsuffix .o, $(TESTS))
$(info TESTS: $(TESTS))
$(info TESTSOBJ: $(TESTSOBJ))
all: $(addprefix $(DEXE),$(TESTS))
#building rules
$(addprefix $(DEXE),$(TESTS)): $(DEXE)%: $(DOBJ)%.o $(DOBJ)lib.o | $(MKDIRS)
@echo $(LITEXT)
@$(CC) $^ -o $@
#compiling rules
$(DOBJ)lib.o: src/lib/lib.c
@echo $(COTEXT)
@$(CC) -c $< -o $@
$(addprefix $(DOBJ),$(TESTSOBJ)): $(DOBJ)%.o: $(DTESTS)%.c \
$(DOBJ)lib.o
@echo $(COTEXT)
@$(CC) -c $< -o $@
$(MKDIRS):
mkdir -p $@
$ make
TESTS: test-2 test-1
TESTSOBJ: test-2.o test-1.o
XXX: exe/test-2 exe/test-1
Compile lib.c
Compile test-2.c
mkdir -p exe/mod/
Assemble exe/test-2
Compile test-1.c
Assemble exe/test-1
Исходная версия xaizek, :
MAKEFLAGS = -j 1
CC = gcc
DOBJ = exe/obj/
DMOD = exe/mod/
DEXE = exe/
MKDIRS = $(DOBJ) $(DMOD) $(DEXE)
#auxiliary variables
COTEXT = "Compile $(<F)"
LITEXT = "Assemble $@"
DTESTS=src/tests/
TESTS=$(basename $(notdir $(wildcard $(DTESTS)/*.c)))
TESTSOBJ=$(addsuffix .o, $(TESTS))
$(info TESTS: $(TESTS))
$(info TESTSOBJ: $(TESTSOBJ))
$(info XXX: $(addprefix $(DEXE),$(TESTS)))
all: $(addprefix $(DEXE),$(TESTS))
#building rules
$(addprefix $(DEXE),$(TESTS)): $(DEXE)%: $(DOBJ)%.o $(DOBJ)lib.o | $(MKDIRS)
@echo $(LITEXT)
@$(CC) $^ -o $@
#compiling rules
$(DOBJ)lib.o: src/lib/lib.c
@echo $(COTEXT)
@$(CC) -c $< -o $@
$(addprefix $(DOBJ),$(TESTSOBJ)): $(DOBJ)%.o: $(DTESTS)%.c \
$(DOBJ)lib.o
@echo $(COTEXT)
@$(CC) -c $< -o $@
$(MKDIRS):
mkdir -p $@
$ make
TESTS: test-2 test-1
TESTSOBJ: test-2.o test-1.o
XXX: exe/test-2 exe/test-1
Compile lib.c
Compile test-2.c
mkdir -p exe/mod/
Assemble exe/test-2
Compile test-1.c
Assemble exe/test-1