为目标制作3次传球

时间:2012-02-16 12:35:08

标签: makefile

我将解释自己,这是我的情景:

  • 编译我的目标
  • 根据第一次编辑进行第一次优化
  • 根据第一次优化进行第二次优化
  • 根据第二次优化进行第三次优化

到目前为止,我尝试了以下内容:

.SUFFIXES:
.SECONDARY:

OBJECTS := $(addsuffix .obj,$(SOURCES))
override OBJECTS := $(OBJECTS:$(SRC)/%.obj=$(OBJ)/%.obj)

OC1 := $(patsubst %.obj, %.oc1, $(filter %c.obj,$(OBJECTS)))
O1 := $(L166_CMD:%.lnp=%.o1)

all: $(TARGET) $(O1)

$(TARGET): $(OBJECTS)
    @echo Linking $(TARGET)...

$(OBJ)/%.c.obj: $(SRC)/%.c
    @echo Compiling $(<F) ...

# c.oc1 is a intermediate file
%.c.oc1: %.c.obj
    @echo 1 - Optimize $<...
    @touch $@

$(O1): $(OC1)
    @touch $@
    echo Linking O1

结果是,我修改了一个C文件,目标只会重新生成修改过的C文件,但O1传递将再次优化所有C文件,就像之前没有完成一样(但它确实如此)。

如何修改此行为?

1 个答案:

答案 0 :(得分:2)

原因是您的上一个目标$(O1): $(OC1)。这就是每个O1取决于每个 OC1

$(O1)的实际价值是多少?它应该是列表还是单个目标?

我会尝试用模式替换这个规则(如果可能的话)。