CC = gcc CFLAGS = -std=c99 -O3 -Wall -Wextra -Wpedantic -Wstrict-aliasing CFLAGS += -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wcast-align CFLAGS += -Wstrict-prototypes -Wstrict-overflow=5 -Wwrite-strings CFLAGS += -Wcast-qual -Wswitch-default -Wswitch-enum CFLAGS += -Wconversion -Wunreachable-code # for asprintf() and getline() CFLAGS += -D_GNU_SOURCE LDFLAGS = NAME = modfetch PROG = modfetch.c LIB = config.c semver.c util.c OBJ = $(PROG:.c=.o) $(LIB:.c=.o) BIN = target TEMPMOD = $(wildcard modules/*.c) MOD = $(TEMPMOD:modules/%=%) .PHONY: all clean all: dirs modules $(NAME) modules: dirs $(MOD:.c=.so) dirs: mkdir -p $(BIN) $(NAME): $(OBJ) $(CC) $(addprefix $(BIN)/, $^) $(LDFLAGS) -o $(BIN)/$@ %.so: modules/%.c $(LIB) $(CC) $^ -shared -fPIC $(CFLAGS) $(LDFLAGS) -o $(BIN)/$@ %.o: %.c $(CC) -c $< $(CFLAGS) -o $(BIN)/$@ clean: clean_modules rm -rf $(addprefix $(BIN)/, $(OBJ)) rm -rf $(BIN)/$(NAME) clean_modules: rm -rf $(wildcard $(BIN)/*.so)