67 lines
1.8 KiB
Makefile
67 lines
1.8 KiB
Makefile
flags = -Wall -D_GNU_SOURCE -Iinclude
|
|
lib-flags = $(flags) -fPIC -shared
|
|
obj-flags = $(flags) -c
|
|
# the --no-as-needed flag is passed to the linker
|
|
# if I was building this correctly it wouldn't be necessary
|
|
# but I'm not going to figure out how to do it right now (TODO: figure out)
|
|
exe-flags = $(flags) -Wl,--no-as-needed -ljwt
|
|
exe := bin/localserv
|
|
src := $(wildcard src/*.c) $(wildcard src/**/*.c)
|
|
obj := $(src:src/%.c=bin/%.o)
|
|
lib-src := $(wildcard lib/*.c)
|
|
lib-obj := $(lib-src:lib/%.c=bin/%.o)
|
|
|
|
all: exe lib
|
|
|
|
exe: $(exe)
|
|
|
|
lib: % : server-% client-%
|
|
|
|
server-lib client-lib: %-lib : bin/%.so
|
|
|
|
# note: $^ is all prereqs listed on the effective line, $< is first prereq listed
|
|
|
|
$(exe): $(lib-obj) $(obj)
|
|
@mkdir -p $(@D)
|
|
@printf "Compiling executable $@ ...\n"
|
|
@gcc $(exe-flags) $^ -o $@
|
|
@printf "Done.\n"
|
|
|
|
$(lib-obj) : bin/%.o : include/%.h
|
|
$(lib-obj) : bin/%.o : lib/%.c
|
|
@mkdir -p $(@D)
|
|
@printf "Compiling object for $< ...\n"
|
|
@gcc $(obj-flags) $< -o $@
|
|
@printf "Done.\n"
|
|
|
|
$(obj) : bin/%.o : src/%.h
|
|
$(obj) : bin/%.o : src/%.c
|
|
@mkdir -p $(@D)
|
|
@printf "Compiling object for $< ...\n"
|
|
@gcc $(obj-flags) $< -o $@
|
|
@printf "Done.\n"
|
|
|
|
bin/%.so : include/%.h
|
|
bin/%.so : lib/%.c
|
|
@mkdir -p $(@D)
|
|
@printf "Compiling DLL for $< ... \n"
|
|
@gcc $(lib-flags) $< -o $@
|
|
@printf "Done.\n"
|
|
|
|
clean:
|
|
@rm -rf bin/*
|
|
@printf "Object files and executable removed.\n"
|
|
|
|
# for debugging the Makefile. say e.g. "make print-shared-src"
|
|
print-% : ; @echo $* = $($*)
|
|
|
|
# client-test server-test: % : bin/%
|
|
|
|
# bin/client-test bin/server-test: c-flags += -g
|
|
# bin/client-test bin/server-test: bin/%-test : src/c/%.h
|
|
# bin/client-test bin/server-test: bin/%-test : src/c/%.c
|
|
# @printf "Compiling test executable for $< ... \n"
|
|
# @gcc $(c-flags) -o $@ $< && printf "Done.\n"
|
|
|
|
.PHONY: all clean exe lib server-lib client-lib
|