diff options
| author | Blake Romero <blake@blkrom.com> | 2024-09-18 14:17:27 +0100 |
|---|---|---|
| committer | Blake Romero <blake@blkrom.com> | 2024-10-30 10:13:26 +0000 |
| commit | e98c4d1dd52c5c5899a956a14b9d9fb43fdfa319 (patch) | |
| tree | bea294ee2083d08126ffc9899fbc2b40e77b0b06 | |
| parent | 371820e703c5a8283397b49680f8ea4b904a0384 (diff) | |
Refactor Makefile
| -rw-r--r-- | Makefile | 60 |
1 files changed, 33 insertions, 27 deletions
@@ -1,43 +1,49 @@ CC=gcc CFLAGS=-std=c17 -Wall -Werror -g -TESTFW=criterion +test_framework=criterion # Directories -BIN=bin -OBJ=obj -SRC=src -TEST=tests +bin_dir=bin +obj_dir=obj +src_dir=src +test_dir=tests # Files -OBJS=$(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(wildcard $(SRC)/*.c)) -TESTBINS=$(patsubst $(TEST)/%.c, $(BIN)/%, $(wildcard $(TEST)/*.c)) +src_files=$(wildcard $(src_dir)/*.c) +obj_files=$(patsubst $(src_dir)/%.c, $(obj_dir)/%.o, $(src_files)) +test_files=$(wildcard $(test_dir)/*.c) +test_bins=$(patsubst $(test_dir)/%.c, $(bin_dir)/%, $(test_files)) +# Actions +.PHONY: all all: test -# Target Directories -$(OBJ): - mkdir $@ - -$(BIN): - mkdir $@ - -# Target Files -$(OBJ)/%.o: $(SRC)/%.c $(OBJ) - $(CC) $(CFLAGS) -o $@ -c $< - -$(BIN)/%: $(BIN) $(TEST)/%.c $(OBJS) - $(CC) $(CFLAGS) -o $@ -l $(TESTFW) $(filter-out $<,$^) - -# Actions .PHONY: test -test: $(TESTBINS) - for test in $(TESTBINS); do ./$$test --verbose; done +test: $(test_bins) + for test in $(test_bins); do ./$$test --verbose; done .PHONY: clean clean: - rm -r $(BIN) $(OBJ) + rm -r $(bin_dir) $(obj_dir) .PHONY: info info: - @printf "OBJS: %s\n" $(OBJS) - @printf "TESTBINS: %s\n" $(TESTBINS) + @printf "src_files: %s\n" $(src_files) + @printf "obj_files: %s\n" $(obj_files) + @printf "test_files: %s\n" $(test_files) + @printf "test_bins: %s\n" $(test_bins) + +# Make Directories +$(obj_dir): + mkdir $@ + +$(bin_dir): + mkdir $@ + +# Make object files +$(obj_dir)/%.o: $(src_dir)/%.c $(obj_dir) + $(CC) $(CFLAGS) -o $@ -c $< + +# Make test binaries +$(bin_dir)/%: $(bin_dir) $(test_files) $(obj_files) + $(CC) $(CFLAGS) -o $@ -l $(test_framework) $(filter-out $<,$^) |
