makefile confusions
I'm 开发者_开发技巧trying to use a top-level makefile. It's supposed to cd into 8 or 10 subdirectories, one by one, and make in each one. But I can't get it to work.
Here's the simplified makefile that lives in the top-level directory:
/home/calls/cgi>cat makefile
all: /home/calls/cgi/chain/chain.o
cd /home/calls/cgi/chain
make -f /home/calls/cgi/chain/makefile
And here's the output from a make command:
/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>
What am I doing wrong, please?
Thanks!
Each line in the makefile is run in its own shell, so the cd command only affects the line it's on. You can, however, use continuation lines:
all: /home/calls/cgi/chain/chain.o
cd /home/calls/cgi/chain; \
make -f /home/calls/cgi/chain/makefile
or just combine them on the same line:
all: /home/calls/cgi/chain/chain.o
cd /home/calls/cgi/chain; make -f /home/calls/cgi/chain/makefile
or if you know that make will always be GNU make:
all: /home/calls/cgi/chain/chain.o
make -C /home/calls/cgi/chain -f /home/calls/cgi/chain/makefile
Also, the -f is probably redundant, if you're in the correct directory: make will try to load GNUmakefile (GNU make only), Makefile, and makefile in that order.
加载中,请稍侯......
精彩评论