Makefile用target调用其他makefile,给出错误的目标

时间:2009-08-18 13:38:03

标签: makefile

我有一个目标为clean的makefile:

clean:
   $(MAKE) -f <other makefile location> clean

当我在这个makefile中调用make clean时,它告诉我在其他makefile中没有规则'clean-linux'。具体来说就是输出。

make -f /root/ovaldi-5.5.25-src/project/linux/Makefile clean
make[1]: Entering directory '/root/ovaldi-5.5.25-src'
make[2]: Entering directory '/root/ovaldi-5.5.25-src'
make[2]: *** No rule to make target 'clean-linux'. Stop.
make[2]: Leaving directory '/root/ovaldi-5.5.25-src'
make[1]: Leaving directory '/root/ovaldi-5.5.25-src'

为什么它给它干净的linux目标而不仅仅像我指定的一样干净?

2 个答案:

答案 0 :(得分:2)

只是猜测但是第二个makefile中的'clean'目标可能叫'clean-linux'?

你可以发布第二个makefile的干净目标吗?

编辑:

根据您发布的干净目标,您似乎只是错误地调用了clean-linux目标。

Beta在他们的回答中发布了处理问题的正确方法,所以我打算将其+1。

答案 1 :(得分:2)

当你制作(或$(MAKE))时,你默认使用makefile。所以这就是我认为正在发生的事情。

  1. 你cd到某个地方。
  2. 你让-f Makefile_A干净'。
  3. 使用Makefile_A运行,并执行'$(MAKE)-f Makefile_B clean'。
  4. make [1]与Makefile_B一起运行,并执行'$(MAKE)clean-linux'。
  5. make [2]运行的任何makefile都在这里可能是任何东西(我怀疑它是Makefile_A)但不管它是什么它都没有clean-linux的规则。

解决方案:重写你的第二个makefile(具有clean-linux的那个),以便clean-linux成为清理的先决条件(如果/当你在linux系统上)。那样它就不会运行make [2]。

ifeq ($(PLATFORM), LINUX)
clean: clean-linux
endif

ifeq ($(PLATFORM), SUNOS)
clean: clean-sunos
endif

clean:;