2012-02-16 43 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