Makefile 为什么此规则位置依赖于此生成文件?真奇怪
我有一个运行正常的测试生成文件。它创建了三个符号链接,只是回显链接名(这只是象征编译过程) 结果如下Makefile 为什么此规则位置依赖于此生成文件?真奇怪,makefile,gnu-make,Makefile,Gnu Make,我有一个运行正常的测试生成文件。它创建了三个符号链接,只是回显链接名(这只是象征编译过程) 结果如下 ckim@stph45:~/test] make clean rm -fr o-optimize rm -f init.c system.h config.h ckim@stph45:~/test] make test -d o-optimize || mkdir o-optimize echo gathering init.c system.h config.h gathering init.
ckim@stph45:~/test] make clean
rm -fr o-optimize
rm -f init.c system.h config.h
ckim@stph45:~/test] make
test -d o-optimize || mkdir o-optimize
echo gathering init.c system.h config.h
gathering init.c system.h config.h
但是如果我把XXX定义和符号链接生成规则移到顶部,它就不起作用了。更改的生成文件:
XXX = init.c system.h config.h
$(XXX) :
ln -s ../src/$@ $@
ARCH = o-optimize
PGM = $(ARCH)/sieve.exe
all: ${ARCH} $(PGM)
$(ARCH):
test -d ${ARCH} || mkdir $(ARCH)
$(PGM): $(XXX)
echo gathering $(XXX)
clean:
rm -fr $(ARCH)
rm -f $(XXX)
结果是:
ckim@stph45:~/test] make clean
rm -fr o-optimize
rm -f init.c system.h config.h
ckim@stph45:~/test] make
ln -s ../src/init.c init.c
为什么XXX定义和规则位置很重要?XXX表示三个文件名,但仅创建第一个文件的符号链接。说明:
规则的顺序并不重要,除了确定
<强>默认目标< /强>:<代码>的目标使考虑,如果您不指定另一个。默认目标是第一个的目标
第一个makefile中的规则
换句话说,$(XXX)
被视为默认目标,而不是全部
。生成文件的其余部分甚至没有运行
有两种解决方法:
makeall
。默认目标
:
.默认目标:=全部ckim@stph45:~/test] make clean
rm -fr o-optimize
rm -f init.c system.h config.h
ckim@stph45:~/test] make
ln -s ../src/init.c init.c