开发者

makefile confusions

开发者 https://www.devze.com 2023-03-16 12:08 出处:网络
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.

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

精彩评论

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