求教Makefile高手一个问题?
程序目录结构: ./main/main.c ./src/sub.c
M1a/jOBkVe
输出: ./out/his/ ./out/main/:r/Oj
I
]2JSuIxp
)eAP.e.uuX#_Ywww.linuxeden.comMakefile如下:
['t T)tYN `Su%bLinux伊甸园论坛
G1R0Sc+Yk+Y0_
SOURCE_DIR := .
H.m,ntQ5GBINARY_DIR := ./out
3y'Pp5F6H'}w Amodules := main src
{H$^ P]www.linuxeden.comsources := $(foreach m,$(modules),$(wildcard $(SOURCE_DIR)/$m/*.c))
q'P`w'j]4uobjects := $(call source-to-object,$(sources))"e_!oP/z4RSO%k8k
D|4[V'l~
g
source-dir-to-binary-dir = $(addprefix $(BINARY_DIR)/, $(patsubst $(SOURCE_DIR)/%,%,$1))
.[`9ULGwww.linuxeden.comsource-to-object = $(call source-dir-to-binary-dir, $(subst .c,.o,$(filter %.c,$1)))4X\z{8V4e,B(H
F+gwPdusw7sY$(program): $(objects)
QJj-d}!ex9R gcc $(CFLAGS) -o $@ $^
)|5ZW5Xh;k Mwww.linuxeden.com4jMg!a\
define one-compile-rule
%~/mgn$k]Z $1: $2
%e*p.O:V1y|fSwww.linuxeden.com @gcc $(CFLAGS) -c $$< -o $$@
`@
aU/A*E9Pwww.linuxeden.comendefl&ep:Wi;Xsh
d H
~.Z
I
]
问题来了:
"nts%P HE:SLinux伊甸园论坛---------------------------------------------------------------------------------:t4Y2C,H2E
kU;sA8H5f
使用下面两行:wRbs5Lft)nT6P
$(eval $(call one-compile-rule,./out/main/main.o,./main/main.c))
)VRyj}{ w$(eval $(call one-compile-rule,./out/src/sub.o,./src/sub.c))
5^n8h+er`7eR一切正常,生成.o文件(./out/his/ ./out/main/下),生成可执行程序$(program).
D9iR1@"w
R})W---------------------------------------------------------------------------------
-EBt3]0y7b1d上面两行不使用换成下面:
\:xv@/Xm~X Jdefine compile-rules
!^2A&OUk`{ $(foreach s,$(sources), \
T2K#h?K2Fw ]!I $(call one-compile-rule,$(call source-to-object,$s),$s))
"k-z
D-g'h QendefLinux伊甸园论坛
ix&_c
h\K;Inn
K{ ]6]|0_8f"}$(eval $(call compile-rules))
6WR2h-]4P8zF
J*UccdYYHk1G3DQ%v
make一下:4I_$vP;a)fE]+^w
ERRORgcc: ./out/src/sub.o:./src/sub.c 没有那个文件或文件夹
P t+orw,ia怪哉怪哉,高手们指点指点,到底哪错了?万分感谢
cJ4])SD(qzLinux伊甸园论坛Cz&x |