NAME = cbook
+NAMES = $(NAME) cutils
+TEST =
+TESTS =
+
+PREFIX = /usr/local
+
dstdir = bin
+
.PHONY: all run clean mrpropre mrpropre love debug doc man \
test tests run-test run-tests run-test-more run-tests-more \
mess-build mess-run mess-clean mess-propre mess-doc mess-man \
mess-test mess-run-test mess-run-test-more \
- $(NAME) utils \
- MK MKTEST MKMAN
+ $(NAMES) $(TESTS)
-all: mess-build $(NAME)
+all: build
-# Sub makes:
-MK:
- @$(MAKE) -C src/$(NAME) $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKTEST:
- @$(MAKE) -C src/tests $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKUTILS:
- @$(MAKE) -C src/cutils $(MAKECMDGOALS) DEBUG=$(DEBUG)
-MKMAN:
- @$(MAKE) -f man.d $(MAKECMDGOALS) NAME=$(NAME) PREFIX=$(PREFIX)
+build: mess-build $(NAMES)
+
+test: mess-test $(TESTS)
# Main buildables
-$(NAME): utils MK
-utils:
- @$(MAKE) -C src/cutils DEBUG=$(DEBUG)
-check:
- @$(MAKE) -C src/cutils check DEBUG=$(DEBUG)
+M_OPTS=$(MAKECMDGOALS) --no-print-directory PREFIX=$(PREFIX) DEBUG=$(DEBUG)
+$(NAMES) $(TESTS):
+ $(MAKE) -C src/$@ $(M_OPTS)
+
+# Manual
+man: mess-man
+ @$(MAKE) -f man.d $(M_OPTS) NAME=$(NAME)
# Run
run: mess-run
$(dstdir)/$(NAME)
-# Test + run test
-tests: test
-test: mess-test utils check MKTEST
-run-tests: run-test
-run-test: mess-run-test utils check MKTEST
-run-tests-more: run-test-more
-run-test-more: mess-run-test-more utils check MKTEST
+# Run main test
+run-test: mess-run-test $(TEST)
+run-test-more: mess-run-test-more $(TEST)
# Doc/man/misc
doc: mess-doc
doxygen
-man: mess-man MKMAN
love:
@echo " ...not war."
debug:
$(MAKE) DEBUG=1
# Clean
-clean: mess-clean MK MKTEST MKUTILS
+clean: mess-clean $(NAMES) $(TESTS)
mrproper: mrpropre
-mrpropre: mess-propre MK MKTEST MKUTILS MKMAN
+mrpropre: mess-propre $(NAMES) $(TESTS) man
rm -rf doc/html doc/latex doc/man
rmdir doc 2>/dev/null || true
# Install/uninstall
-install: mess-install MK MKMAN
-uninstall: mess-uninstall MK MKMAN
+install: mess-install $(NAME) man
+uninstall: mess-uninstall $(NAME) man
# Messages
mess-build:
+ @echo
@echo ">>>>>>>>>> Running $(NAME)..."
mess-run:
- @echo ">>>>>>>>>> Running $(NAME)..."
@echo
+ @echo ">>>>>>>>>> Running $(NAME)..."
mess-clean:
+ @echo
@echo ">>>>>>>>>> Cleaning $(NAME)..."
mess-propre:
+ @echo
@echo ">>>>>>>>>> Calling Mr Propre..."
mess-doc:
+ @echo
@echo ">>>>>>>>>> Generating documentation for $(NAME)..."
mess-man:
+ @echo
@echo ">>>>>>>>>> Generating the manual of $(NAME)..."
mess-test:
+ @echo
@echo ">>>>>>>>>> Building tests for $(NAME)..."
mess-run-test:
- @echo ">>>>>>>>>> Running tests on $(NAME)..."
@echo
+ @echo ">>>>>>>>>> Running tests on $(NAME)..."
mess-run-test-more:
- @echo ">>>>>>>>>> Running more tests on $(NAME)..."
@echo
+ @echo ">>>>>>>>>> Running more tests on $(NAME)..."
mess-install:
+ @echo
@echo ">>>>>>>>>> Installing $(NAME) into $(PREFIX)..."
mess-uninstall:
+ @echo
@echo ">>>>>>>>>> Uninstalling $(NAME) from $(PREFIX)..."
install:
@if [ -e "man/man1/$(NAME).1" ]; then \
- echo cp -r man/ "$(PREFIX)"/share/; \
- cp -r man/ "$(PREFIX)"/share/; \
+ echo mkdir -p "$(PREFIX)"/share/man; \
+ mkdir -p "$(PREFIX)"/share/man; \
+ echo cp -r man "$(PREFIX)"/share/; \
+ cp -r man "$(PREFIX)"/share/; \
else \
echo "No manual has been built (see \`make man')"; \
fi
echo rm "$(PREFIX)/share/$$page";\
rm "$(PREFIX)/share/$$page";\
done; \
+ echo rmdir "$(PREFIX)/share/man" 2>/dev/null \|\| true; \
+ rmdir "$(PREFIX)/share/man" 2>/dev/null || true; \
+ rmdir "$(PREFIX)/share" 2>/dev/null || true; \
else \
echo "No manual has been built (see \`make man')"; \
fi
# Note: 99+ required for for-loop initial declaration (CentOS 6)
-srcdir = cbook
+NAME = cbook
+NAMES = $(NAME)
+srcdir = $(NAME)
dstdir = ../bin
CFLAGS += -Wall -pedantic -I./ -std=c99
CXXFLAGS += -Wall -pedantic -I./
-LDFLAGS += $(dstdir)/libcutils.o
+# LDFLAGS += -lcheck
+PREFIX = /usr/local
ifdef DEBUG
CFLAGS += -ggdb -O0
CXXFLAGS += -ggdb -O0
endif
-.PHONY: all build install uninstall clean mrpropre mrpropre
-
-all: build
-
-build: $(dstdir)/cbook
+.PHONY: all build install uninstall clean mrpropre mrpropre \
+ $(NAMES)
SOURCES=$(wildcard $(srcdir)/*.c)
HEADERS=$(wildcard $(srcdir)/*.h)
OBJECTS=$(SOURCES:%.c=%.o)
-$(dstdir)/cbook: $(OBJECTS) $(dstdir)/libcutils.o
+# Main targets
+
+all: build
+
+build: $(NAMES)
+
+cbook: $(dstdir)/cbook
+
+################
+# Dependencies #
+################
+OBJECTS+=$(dstdir)/libcutils.o
+$(dstdir)/libcutils.o:
+ $(MAKE) --no-print-directory -C cutils/ cutils
+################
+
+$(dstdir)/cbook: $(OBJECTS)
mkdir -p $(dstdir)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $@