Çó½ÌMakefile¸ßÊÖÒ»¸öÎÊÌâ?
³ÌÐòĿ¼½á¹¹: ./main/main.c ./src/sub.cÊä³ö: ./out/his/ ./out/main/
MakefileÈçÏÂ:%xVJ:};_XR%T~ D`
SOURCE_DIR := .3Y|-n9bdH;Ed
BINARY_DIR := ./outv)Jn-r8LvIo
modules := main src1L6o2j3b(i#d|
sources := $(foreach m,$(modules),$(wildcard $(SOURCE_DIR)/$m/*.c))[,CNR y;I,|m
objects := $(call source-to-object,$(sources))(bS_q [
source-dir-to-binary-dir = $(addprefix $(BINARY_DIR)/, $(patsubst $(SOURCE_DIR)/%,%,$1))
source-to-object = $(call source-dir-to-binary-dir, $(subst .c,.o,$(filter %.c,$1)))kMs%WWC^K*G
$(program): $(objects)*H ^`8i7? Esg;N
gcc $(CFLAGS) -o $@ $^v0s'K]i!M(y
wX El9[+~
define one-compile-rule
$1: $2
@gcc $(CFLAGS) -c $$< -o $$@
endef
ÎÊÌâÀ´ÁË:
---------------------------------------------------------------------------------
ʹÓÃÏÂÃæÁ½ÐÐ:
$(eval $(call one-compile-rule,./out/main/main.o,./main/main.c)) @e8qh!E8gi
$(eval $(call one-compile-rule,./out/src/sub.o,./src/sub.c)).D(s/so'Zi
Ò»ÇÐÕý³£,Éú³É.oÎļþ(./out/his/ ./out/main/ÏÂ),Éú³É¿ÉÖ´ÐгÌÐò$(program).hI&jYn+D
---------------------------------------------------------------------------------8US"n%^-v{m6i
ÉÏÃæÁ½Ðв»Ê¹Óû»³ÉÏÂÃæ:\4CF~D
define compile-rulesr:v6@,Y| c zH
$(foreach s,$(sources), \ Di\/z]]:_2kS
$(call one-compile-rule,$(call source-to-object,$s),$s))O;}1h M3T;^
endef
r`/xW|5pxG$FzZ U
$(eval $(call compile-rules))HU t)F^)R
makeÒ»ÏÂ:Wy _x x#m*BXp
ERRORgcc: ./out/src/sub.o:./src/sub.c ûÓÐÄǸöÎļþ»òÎļþ¼Ð;}0c2\r |e
¹ÖÔÕ¹ÖÔÕ,¸ßÊÖÃÇÖ¸µãÖ¸µã,µ½µ×ÄÄ´íÁË?Íò·Ö¸ÐлE&YNP-l_X