2011-06-29 10 views
1

私はトップレベルのmakefileを使用しようとしています。それは、8つまたは10のサブディレクトリに1つずつcdして、それぞれを作成することになっています。しかし、私はそれを働かせることはできません。ここでmakefile confusions

は、トップレベルのディレクトリに住んで単純化されたメイクファイルです:

/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の各行は、それ自身のシェルで実行されるため、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は正しいディレクトリにある場合はおそらく冗長です。makeGNUmakefile(GNU makeのみ)、Makefile、およびmakefileの順である。

+0

ありがとうございます!それは(間違って...)すべてを明瞭にします。 'それをpreciate。 –