我将解释自己,这是我的情景:
到目前为止,我尝试了以下内容:
.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文件,就像之前没有完成一样(但它确实如此)。
如何修改此行为?
答案 0 :(得分:2)
原因是您的上一个目标$(O1): $(OC1)
。这就是每个O1
取决于每个 OC1
。
$(O1)
的实际价值是多少?它应该是列表还是单个目标?
我会尝试用模式替换这个规则(如果可能的话)。