makefile
authorNiki Roo <niki@nikiroo.be>
Sun, 30 Jun 2024 11:36:29 +0000 (13:36 +0200)
committerNiki Roo <niki@nikiroo.be>
Sun, 30 Jun 2024 11:36:29 +0000 (13:36 +0200)
Makefile
src/cbook/Makefile
src/cbook/makefile.d
src/cutils
src/tests-cbook/makefile.d

index 51e897c0d687549a447616204f2bd3fd93ee9b50..51306d4588090a0d54431da067ca63ad7584ab80 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,19 @@
+#
+# Simple makefile that will forward all commands to src/xxx
+# > NAME: main program (for 'man' and 'run')
+# > NAMES: list of all the programs to compile
+# > TESTS: list of all test programs to compile and run
+#
 NAME   = cbook
 NAMES  = $(NAME) cutils
-TEST   = tests-cbook
-TESTS  = $(TEST)
+TESTS  = tests-cbook
 
+# You may override these when calling make
 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 \
+.PHONY: all build run clean mrpropre mrpropre love debug doc man \
+       test run-test run-test-more \
        mess-build mess-run mess-clean mess-propre mess-doc mess-man \
        mess-test mess-run-test mess-run-test-more \
        $(NAMES) $(TESTS)
@@ -21,21 +25,21 @@ build: mess-build $(NAMES)
 test: mess-test $(TESTS)
 
 # Main buildables
-M_OPTS=$(MAKECMDGOALS) --no-print-directory PREFIX=$(PREFIX) DEBUG=$(DEBUG)
+M_OPTS=$(MAKECMDGOALS) --no-print-directory \
+       PREFIX=$(PREFIX) DEBUG=$(DEBUG) dstdir=$(abspath $(dstdir))
 $(NAMES) $(TESTS):
-       $(MAKE) -C src/$@ $(M_OPTS)
+       $(MAKE) -C src/$@ $(M_OPTS) 
 
 # Manual
 man: mess-man
-       @$(MAKE) -f man.d $(M_OPTS) NAME=$(NAME)
+       @$(MAKE) -f man.d $(MAKECMDGOALS) NAME=$(NAME)
 
 # Run
-run: mess-run
-       $(dstdir)/$(NAME)
+run: mess-run $(NAME)
 
 # Run main test
-run-test: mess-run-test $(TEST)
-run-test-more: mess-run-test-more $(TEST)
+run-test: mess-run-test $(TESTS)
+run-test-more: mess-run-test-more $(TESTS)
 
 # Doc/man/misc
 doc: mess-doc
@@ -43,29 +47,29 @@ doc: mess-doc
 love:
        @echo " ...not war."
 debug:
-       $(MAKE) DEBUG=1
+       $(MAKE) $(MAKECMDGOALS) PREFIX=$(PREFIX) NAME=$(NAME) DEBUG=1
 
 # Clean
-clean: mess-clean $(NAMES) $(TESTS)
+clean: mess-clean $(TESTS) $(NAMES)
 mrproper: mrpropre
-mrpropre: mess-propre $(NAMES) $(TESTS) man
+mrpropre: mess-propre $(TESTS) $(NAMES) man
        rm -rf doc/html doc/latex doc/man
        rmdir doc 2>/dev/null || true
 
 # Install/uninstall
-install: mess-install $(NAME) man
-uninstall: mess-uninstall $(NAME) man
+install: mess-install $(NAMES) man
+uninstall: mess-uninstall $(NAMES) man
 
 # Messages
 mess-build:
        @echo
-       @echo ">>>>>>>>>> Running $(NAME)..."
+       @echo ">>>>>>>>>> Building $(NAMES) in $(dstdir)..."
 mess-run:
        @echo
        @echo ">>>>>>>>>> Running $(NAME)..."
 mess-clean:
        @echo
-       @echo ">>>>>>>>>> Cleaning $(NAME)..."
+       @echo ">>>>>>>>>> Cleaning $(NAMES) $(TESTS)..."
 mess-propre:
        @echo
        @echo ">>>>>>>>>> Calling Mr Propre..."
@@ -74,16 +78,16 @@ mess-doc:
        @echo ">>>>>>>>>> Generating documentation for $(NAME)..."
 mess-man:
        @echo
-       @echo ">>>>>>>>>> Generating the manual of $(NAME)..."
+       @echo ">>>>>>>>>> Manual of $(NAME): $(MAKECMDGOALS)..."
 mess-test:
        @echo
-       @echo ">>>>>>>>>> Building tests for $(NAME)..."
+       @echo ">>>>>>>>>> Building all tests in $(dstdir): $(TESTS)..."
 mess-run-test:
        @echo
-       @echo ">>>>>>>>>> Running tests on $(NAME)..."
+       @echo ">>>>>>>>>> Running tests: $(TESTS)..."
 mess-run-test-more:
        @echo
-       @echo ">>>>>>>>>> Running more tests on $(NAME)..."
+       @echo ">>>>>>>>>> Running more tests: $(TESTS)..."
 mess-install:
        @echo
        @echo ">>>>>>>>>> Installing $(NAME) into $(PREFIX)..."
index dba54eb20db5cda6c63640e4f5e973a3a0bbf9c4..699e5602a54f031afe87efac79fe9fba4d4d2fff 100644 (file)
@@ -1,9 +1,10 @@
 # Simply pass everything to makefile.d, but calling from "../"
 
-.PHONY: MK all install uninstall clean mrpropre mrpropre
+.PHONY: all build install uninstall clean mrpropre mrpropre \
+       run test run-test run-test-more default \
+       cbook
 
-$(MAKECMDGOALS): MK
-MK:
+default $(MAKECMDGOALS):
        @$(MAKE) --no-print-directory -C ../ -f $(CURDIR)/makefile.d \
        $(MAKECMDGOALS)
 
index 87654a0c7cc4d18c3a2928b70bf6e1bdd1d88e52..88fbb17d2160b0cdc6434ed3fb6bc2c673fbc313 100644 (file)
@@ -3,7 +3,10 @@
 NAME   = cbook
 NAMES  = $(NAME)
 srcdir = $(NAME)
-dstdir = ../bin
+
+ifeq ($(dstdir),)
+dstdir = $(srcdir)/bin
+endif
 
 CFLAGS   += -Wall -pedantic -I./ -std=c99
 CXXFLAGS += -Wall -pedantic -I./
@@ -16,7 +19,7 @@ CXXFLAGS += -ggdb -O0
 endif
 
 .PHONY: all build install uninstall clean mrpropre mrpropre \
-       $(NAMES) deps run
+       $(NAMES) deps test run run-test run-test-more
 
 SOURCES=$(wildcard $(srcdir)/*.c)
 OBJECTS=$(SOURCES:%.c=%.o)
@@ -29,6 +32,13 @@ build: $(NAMES)
 
 $(NAME): deps $(dstdir)/$(NAME)
 
+# Program, so no test
+run:
+       @echo
+       $(dstdir)/$(NAME) --help
+test run-test run-test-more:
+       @echo you are in the sources of the program, look at the tests instead
+
 ################
 # Dependencies #
 ################
@@ -46,25 +56,27 @@ DEPENDS=$(SOURCES:%.c=%.d)
 
 $(dstdir)/$(NAME): $(DEPS) $(OBJECTS)
        mkdir -p $(dstdir)
+       # note: -r = --relocatable, but former also works with Clang
        $(CC) $(CFLAGS) $(LDFLAGS) $(DEPS) $(OBJECTS) -o $@
 
-run:
-       @echo
-       $(dstdir)/$(NAME)
+debug: 
+       $(MAKE) -f $(srcdir)/makefile.d DEBUG=1
 
 clean:
-       rm -f $(OBJECTS) $(DEPENDS)
+       rm -f $(OBJECTS)
+       rm -f $(DEPENDS)
+       rm -f $(DEPS)
 
 mrproper: mrpropre
 mrpropre: clean
        rm -f $(dstdir)/$(NAME)
        rmdir $(dstdir) 2>/dev/null || true
 
-install: 
+install: build
        mkdir -p "$(PREFIX)/bin"
-       cp $(dstdir)/$(NAME) "$(PREFIX)/bin/"
+       cp "$(dstdir)/$(NAME)" "$(PREFIX)/bin/"
 
-uninstall:
+uninstall: build
        rm "$(PREFIX)/bin/$(NAME)"
        rmdir "$(PREFIX)/bin" 2>/dev/null
 
index 70e6676e68300c59384ffb1127fd1330e1d644e7..780c8d0590a2f34e68ff896058b3b1a89539dcd8 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 70e6676e68300c59384ffb1127fd1330e1d644e7
+Subproject commit 780c8d0590a2f34e68ff896058b3b1a89539dcd8
index 82682db46c46dafaaa5fbd7ddbec28654ed9abbc..2d5a0d76ef02c536eb5fa124180ad992f9d672ed 100644 (file)
@@ -3,7 +3,10 @@
 NAME   = tests-cbook
 NAMES  = $(NAME)
 srcdir = $(NAME)
-dstdir = ../bin
+
+ifeq ($(dstdir),)
+dstdir = $(srcdir)/bin
+endif
 
 CFLAGS   += -Wall -pedantic -I./ -std=c99
 CXXFLAGS += -Wall -pedantic -I./
@@ -29,13 +32,24 @@ build: $(NAMES)
 
 $(NAME): deps $(dstdir)/$(NAME)
 
+# Test program, so running = running tests
+run: run-test
+test: build
+run-test: test
+       @echo
+       $(dstdir)/$(NAME)
+run-test-more: test
+       @echo
+       $(dstdir)/$(NAME) --more
+
 ################
 # Dependencies #
 ################
 ## Libs (if needed)
 deps:
-       $(MAKE) --no-print-directory -C cutils/ check
-DEPS=$(dstdir)/libcutils-check.o
+       $(MAKE) dstdir=$(dstdir) --no-print-directory -C cutils/ cutils
+       $(MAKE) dstdir=$(dstdir) --no-print-directory -C cutils/ check
+DEPS=$(dstdir)/libcutils.o $(dstdir)/libcutils-check.o
 
 ## Headers
 DEPENDS=$(SOURCES:%.c=%.d)
@@ -48,22 +62,16 @@ $(dstdir)/$(NAME): $(DEPS) $(OBJECTS)
        mkdir -p $(dstdir)
        $(CC) $(CFLAGS) $(LDFLAGS) $(DEPS) $(OBJECTS) -o $@
 
-# Test program, so running = running tests
-run: run-test
-test: build
-
-run-test: test
-       @echo
-       $(dstdir)/$(NAME)
-run-test-more: test
-       @echo
-       $(dstdir)/$(NAME) --more
-
 clean:
-       rm -f $(OBJECTS) $(DEPENDS)
+       rm -f $(OBJECTS) 
+       rm -f $(DEPENDS)
+       rm -f $(DEPS)
 
 mrproper: mrpropre
 mrpropre: clean
        rm -f $(dstdir)/$(NAME)
        rmdir $(dstdir) 2>/dev/null || true
 
+install uninstall:
+       @echo Those are tests, nothing to install/uninstall
+