1

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

在不删除所有 .o 的情况下,我如何强制debugosd.o使其过时 - 因此make一旦遇到编译错误就强制停止debugosd.o

构建 .o 文件的规则是:

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

makefile 片段是:

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无论错误如何,这都会迫使它继续进行。

4

1 回答 1

1

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

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

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

于 2010-01-28T14:24:31.097 回答