1
1
mirror of https://github.com/theoludwig/libcproject.git synced 2024-11-08 22:31:31 +01:00

perf: improve Makefile to only compile changed files

fixes #4
This commit is contained in:
Divlo 2023-01-06 17:37:50 +01:00
parent 6932907f05
commit 469859001e
No known key found for this signature in database
GPG Key ID: 8F9478F220CE65E9
2 changed files with 14 additions and 12 deletions

2
.gitignore vendored
View File

@ -1,9 +1,9 @@
build build
bin bin
documentation
.vscode .vscode
*.out *.out
*.o *.o
*.exe *.exe
*.a *.a
node_modules node_modules
documentation

View File

@ -4,35 +4,37 @@ CC_FLAGS = -Wall -Wextra -Wfloat-equal -Wundef -Werror -std=c17 -pedantic -pedan
LIB = ./build/${LIBRARY_NAME}.a LIB = ./build/${LIBRARY_NAME}.a
LIB_CC_FLAGS = -L. -l:${LIB} LIB_CC_FLAGS = -L. -l:${LIB}
LIB_SOURCES = $(wildcard lib/*.c) LIB_SOURCES = $(wildcard lib/*.c)
LIB_OBJECTS = $(patsubst %.c, %.o, $(LIB_SOURCES))
TEST_SOURCES = $(wildcard test/*.c) TEST_SOURCES = $(wildcard test/*.c)
TEST_OBJECTS = $(patsubst %.c, %.o, $(TEST_SOURCES))
HEADER_FILES = $(wildcard lib/*.h) $(wildcard test/*.h) ./${LIBRARY_NAME}.h HEADER_FILES = $(wildcard lib/*.h) $(wildcard test/*.h) ./${LIBRARY_NAME}.h
MAIN_EXECUTABLE = bin/main.exe MAIN_EXECUTABLE = bin/main.exe
SET_VERSION_EXECUTABLE = bin/set_version.exe SET_VERSION_EXECUTABLE = bin/set_version.exe
TEST_EXECUTABLE = bin/test.exe TEST_EXECUTABLE = bin/test.exe
.PHONY: all build/%.o: %.c
all: ${LIB_SOURCES} mkdir --parents ./build/lib ./build/test
mkdir --parents ./build ${CC} ${CC_FLAGS} -c $< -o $@
${CC} ${CC_FLAGS} -c ${LIB_SOURCES}
${LIB}: $(addprefix build/, ${LIB_OBJECTS})
rm --force ${LIB} rm --force ${LIB}
ar -rcs ${LIB} *.o ar -rcs ${LIB} $(addprefix build/, ${LIB_OBJECTS})
rm --recursive --force *.o
.PHONY: run .PHONY: run
run: all ./main.c run: ${LIB} ./main.c
mkdir --parents ./bin mkdir --parents ./bin
${CC} ${CC_FLAGS} -o ${MAIN_EXECUTABLE} ./main.c ${LIB_CC_FLAGS} ${CC} ${CC_FLAGS} -o ${MAIN_EXECUTABLE} ./main.c ${LIB_CC_FLAGS}
./${MAIN_EXECUTABLE} ${ARGS} ./${MAIN_EXECUTABLE} ${ARGS}
.PHONY: set_version .PHONY: set_version
set_version: all ./set_version.c set_version: ${LIB} ./set_version.c
mkdir --parents ./bin mkdir --parents ./bin
${CC} ${CC_FLAGS} -o ${SET_VERSION_EXECUTABLE} ./set_version.c ${LIB_CC_FLAGS} ${CC} ${CC_FLAGS} -o ${SET_VERSION_EXECUTABLE} ./set_version.c ${LIB_CC_FLAGS}
.PHONY: test .PHONY: test
test: all ${TEST_SOURCES} test: ${LIB} $(addprefix build/, ${TEST_OBJECTS})
mkdir --parents ./bin mkdir --parents ./bin
${CC} ${CC_FLAGS} -o ${TEST_EXECUTABLE} ${TEST_SOURCES} ${LIB_CC_FLAGS} ${CC} ${CC_FLAGS} -o ${TEST_EXECUTABLE} $(addprefix build/, ${TEST_OBJECTS}) ${LIB_CC_FLAGS}
./${TEST_EXECUTABLE} ./${TEST_EXECUTABLE}
.PHONY: lint .PHONY: lint
@ -45,4 +47,4 @@ documentation:
.PHONY: clean .PHONY: clean
clean: clean:
rm --recursive --force ./build ./bin *.out *.o *.exe *.a documentation rm --recursive --force ./build ./bin ./documentation