2012-02-16 45 views
1

我会解释一下,这是我的情景:做3次为目标

  • 编译我的目标
  • 做基于第一编译
  • 做基于第二优化第一优化第一个优化
  • 做基于第二优化第三优化

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

.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 [email protected] 

$(O1): $(OC1) 
    @touch [email protected] 
    echo Linking O1 

的结果是,我修改一个C文件,则目标将重新只修改后的C文件,但O1通将优化所有的C文件再次就像是没做过的(但它)。

我该如何修改此行为?

回答

2

原因是你最后的目标,$(O1): $(OC1)。这是每个O1取决于OC1

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

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

+0

$(O1)是我个案中的单个目标。那么我应该改变什么? – 2012-02-16 14:57:55

+0

@Arnaud,嗯,我不知道。你可以发布(即pastebin.com)运行'make'的输出来显示原始问题吗? – 2012-02-16 17:21:11