2011-06-29 92 views
1

我正在嘗試使用頂層makefile。它應該逐個放入8個或10個子目錄中,並在每個子目錄中製作。但我無法讓它工作。makefile混淆

下面是住在頂層目錄簡化的Makefile:

/home/calls/cgi>cat makefile 

all: /home/calls/cgi/chain/chain.o 
     cd /home/calls/cgi/chain 
     make -f /home/calls/cgi/chain/makefile 

下面是從make命令的輸出:

/home/calls/cgi>make 
cd /home/calls/cgi/chain 
make -f /home/calls/cgi/chain/makefile 
make[1]: Entering directory `/home/calls/cgi' 
make[1]: *** No rule to make target `chain.c', needed by `chain'. Stop. 
make[1]: Leaving directory `/home/calls/cgi' 
make: *** [all] Error 2 
/home/calls/cgi> 

什麼我做錯了嗎?

謝謝!

回答

2

makefile中的每一行都在其自己的shell中運行,因此cd命令僅影響它所在的​​行。你可以,但是,使用續行:

all: /home/calls/cgi/chain/chain.o 
     cd /home/calls/cgi/chain; \ 
     make -f /home/calls/cgi/chain/makefile 

或只是在同一行結合他們:

all: /home/calls/cgi/chain/chain.o 
     cd /home/calls/cgi/chain; make -f /home/calls/cgi/chain/makefile 

,或者如果你知道make永遠是GNU make

all: /home/calls/cgi/chain/chain.o 
     make -C /home/calls/cgi/chain -f /home/calls/cgi/chain/makefile 

另外,-f可能是多餘的,如果你在正確的目錄中:make會嘗試加載GNUmakefile(GNU僅限於make),Makefilemakefile

+0

謝謝!這使得(錯誤...)使一切都變得清晰。 '它充分利用了它。 –