orton_runner/lib/Makefile

53 lines
1.2 KiB
Makefile

#!/usr/bin/make -f
# ---
# Project: my_libc
# Author: yann.magnin@epitech.eu
# ---
include ../global.mk
build-dir = ../build
header = -I../include
target-module = my_stdio my_stdlib my_string my_csfml
$(foreach mod, $(target-module), $(eval \
target-$(mod)-src = $(wildcard $(mod)/*.c)$n\
target-$(mod)-obj = $$(patsubst %.c,$(build-dir)/lib_%.o, $$(subst \
$(mod)/,l$(subst _,,$(mod))_,$$(target-$(mod)-src))) $n\
target-$(mod)-out = $(patsubst %,lib%.a,$(subst _,,$(mod)))\
))
target-lib = $(foreach mod, $(target-module), $(target-$(mod)-out))
define rule-target
$(patsubst %.c,$(build-dir)/lib_%.o,\
$(subst $2/,l$(subst _,,$2)_,$1)): $1 | $(build-dir)
$$(cc) $(cflags) -c $$< -o $$@ $(header)
endef
define rule-link
$(patsubst %,lib%.a,$(subst _,,$1)): $2
@ printf 'link lib \033[1;35m$$@\033[0m\n'
$(ar) crs $$@ $$^
endef
all: $(target-lib)
$(build-dir):
@ printf 'create build folder:\033[1;35m $@\033[0m\n'
mkdir -p $@
$(foreach mod,$(target-module), \
$(foreach source,$(target-$(mod)-src), $(eval \
$(call rule-target,$(source),$(mod))))\
$(eval $(call rule-link,$(mod),$(target-$(mod)-obj)))\
)
clean:
rm -rf $(build-dir)
fclean: clean
rm -rf $(target-lib)
re: fclean all
.PHONY: re clean fclean all