# qcsv: rename file extensions project # General variables CFLAGS=-g -O3 -Wall -Wextra -std=c11 INCLUDE_PATH := -Isrc INCLUDE_PATH += -Isrc/libqcsv # Projects all: tools doc runtest tools: cli libqcsv test # Command line tool: qcsv CLI_HEADERS=$(wildcard src/cli/*.h) CLI_SOURCES=$(wildcard src/cli/*.c) # src/cli/args.c src/cli/main.c CLI_OBJECTS=$(CLI_SOURCES:src/%.c=build/%.o) # build/cli/args.o build/cli/main.o cli: bin/qcsv bin/qcsv: $(CLI_OBJECTS) $(CLI_HEADERS) lib/qcsv.a | bin gcc $(CFLAGS) -o $@ $(CLI_OBJECTS) lib/qcsv.a # Library: qcsv.a LIB_HEADERS=$(wildcard src/libqcsv/*.h) LIB_SOURCES=$(wildcard src/libqcsv/*.c) LIB_OBJECTS=$(LIB_SOURCES:src/%.c=build/%.o) .PHONY: libqcsv libqcsv: lib/qcsv.a lib/qcsv.a: $(LIB_OBJECTS) | lib ar rs $@ $^ # Unit testing TEST_HEADERS=$(wildcard src/test/*.h) TEST_SOURCES=$(wildcard src/test/*.c) TEST_OBJECTS=$(TEST_SOURCES:src/%.c=build/%.o) runtest: test bin/test test: bin/test bin/test: $(TEST_OBJECTS) $(TEST_HEADERS) lib/qcsv.a | bin gcc $(CFLAGS) -o $@ $(TEST_OBJECTS) lib/qcsv.a # Compile a C source file build/%.o: src/%.c | build gcc -c $(CFLAGS) $(INCLUDE_PATH) -o $@ $< # Directories build: mkdir -p $@ $@/cli $@/libqcsv $@/test bin: mkdir -p $@ lib: mkdir -p $@ # Valgrind .PHONY: memcheck memcheck: bin/qcsv valgrind -v --leak-check=yes bin/qcsv test/test1.csv # Documentation .PHONY: doc doc: Doxyfile doxygen Doxyfile # Misc .PHONY: zip zip: rm -f qcsv.zip zip -r9 qcsv.zip .gitignore Doxyfile Makefile src .PHONY: clean clean: rm -rf build bin doc lib html latex