开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜