我正在尝试使用顶级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>
我做错了什么,拜托?
谢谢!
答案 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
按此顺序。