【问题标题】:How can I force make to exit if compiling one dependency fails?如果编译一个依赖项失败,如何强制退出?
【发布时间】:2010-01-28 14:15:09
【问题描述】:

我已经发布了我的 makefile 的相关部分。当我在这个 makefile 上运行 make all 时,编译 debugosd.o 时出现编译错误。然而,因为 make 找到了一个以前构建的 debugosd.o,它只是继续构建 dialup.otz

在不删除所有 .o 的情况下,如何强制 debugosd.o 过时 - 并强制 make 在遇到 debugosd.o 中的编译错误时立即停止?

构建.o文件的规则是:

%.o: %.c
    $(TITLE)
    $(CC) $(COMPILE) $(C_OPTIONS) -c $<

makefile sn-p 是:

all: shared0.flw shared1.flw shared2.flw shared3.flw

debugosd.o: debugosd.c debugosd.h
xdialler_interface_new.o: xdialler_interface.h
dialup.ooo: xdialler_interface_new.o debugosd.o xDialler.a
    $(TITLE)
    $(MAKE_OOO)

dialup.otz: dialup.ooo  
    $(BIN)opress $< 

shared1.dir: dialup.otz 
    $(TITLE)
    $(BIN)dirbuild $(SHAREDDIR1_OPTIONS)

shared1.flw: shared1.dir 
    $(TITLE)
    $(BIN)flwbuild $(SHAREDFLW_OPTIONS1)

实际上,我发现了问题所在。我正在使用虚假目标强制重建shared1.flw。我认为这会迫使 make 继续进行,无论错误如何。

【问题讨论】:

  • 奇怪,我以为 make 已经这样做了。
  • 是的,我也是 - make 继续构建 shared2.flw 和 shared3.flw。

标签: gcc makefile gnu-make


【解决方案1】:

您没有为 debugosd.o 列出特定的子命令,所以我假设它在某处使用默认值(例如 .c.o)。

如果任何子命令返回非零退出代码,Make 应该退出,除非命令以 - 开头。检查用于dubugosd.o 目标的实际命令。

是否存在先前构建的文件无关紧要,make 不应在出现错误情况后继续。

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2019-11-01
    • 2021-12-26
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多