1
我有這個測試的Makefile運行正常。它產生三個符號鏈接,並且只是回顯鏈接名稱(這只是象徵編譯過程)。爲什麼這個規則在這個Makefile中與位置有關?真奇怪
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)
XXX = init.c system.h config.h
$(XXX) :
ln -s ../src/[email protected] [email protected]
下面是結果。
[email protected]:~/test] make clean
rm -fr o-optimize
rm -f init.c system.h config.h
[email protected]:~/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定義和符號鏈接生成規則移到頂部,則不起作用。更改的Makefile:
XXX = init.c system.h config.h
$(XXX) :
ln -s ../src/[email protected] [email protected]
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)
而結果:
[email protected]:~/test] make clean
rm -fr o-optimize
rm -f init.c system.h config.h
[email protected]:~/test] make
ln -s ../src/init.c init.c
爲什麼在XXX的定義和規則的位置關係嗎? XXX代表三個文件名,但只有第一個文件的符號鏈接正在製作。
好吧,這是正確的。 (其實我知道這個規則,但錯過了這一點)。但在我的情況下更大的問題是爲什麼符號鏈接生成配方製作第一個符號鏈接而不是全部三個鏈接? –