【问题标题】:Makefile calling other makefile with target, gives wrong targetMakefile用目标调用其他makefile,给出错误的目标
【发布时间】:2009-08-18 13:38:02
【问题描述】:

我有一个目标为 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'

为什么它给它 clean-linux 目标,而不是像我指定的那样干净?

【问题讨论】:

  • clean : @if [ $(PLATFORM) = LINUX ];然后 \ make clean-linux; \fi; \ 如果 [ $(平台) = SUNOS ];然后\制作干净的sunos; \fi; clean-linux: -rm -rf $(OUTDIR) clean-sunos: -rm -rf $(OUTDIR) 它确实调用了 clean-linux 但已经指定了。

标签: makefile


【解决方案1】:

当您制作(或 $(MAKE))时,默认情况下您使用那里的任何 makefile。所以这就是我认为正在发生的事情。

  1. 你 cd 到某个位置。
  2. 你'make -f Makefile_A clean'。
  3. make 使用 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 成为 clean 的先决条件(如果/当您在 linux 系统上时)。这样它就不会运行 make[2]。

ifeq ($(平台), LINUX) 清洁:清洁Linux 万一 ifeq ($(平台), SUNOS) 清洁:清洁-sunos 万一 干净的:;

【讨论】:

  • 该语法在 ifeq 第一行给我“缺少分隔符”
  • @gcb,所以请尝试一些基本的故障排除。你能得到任何ifeq 声明吗?如果问题仍然存在,请将其作为问题与您的完整 makefile 以及您正在使用的 Make 版本等详细信息一起发布。
【解决方案2】:

只是一个猜测,但也许第二个 makefile 中的“干净”目标调用了“clean-linux”?

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

编辑:

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

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

【讨论】:

  • 它确实调用了它,但它被指定了。似乎目标依赖项和在第二个 makefile 中调用 make 在第一个 makefile 上调用 make。
猜你喜欢
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多