makefile混淆

时间:2011-06-29 17:26:15

标签: makefile

我正在尝试使用顶级makefile。它应该逐个cd到8或10个子目录,并在每个子目录中制作。但我无法让它发挥作用。

以下是位于顶级目录中的简化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>

我做错了什么,拜托?

谢谢!

1 个答案:

答案 0 :(得分: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),{{ 1}}和Makefile按此顺序。