Сделайте 3 паса для цели - PullRequest
       0

Сделайте 3 паса для цели

1 голос
/ 16 февраля 2012

Я объясню, вот мой сценарий:

  • Скомпилируйте мою цель
  • Выполните первую оптимизацию на основе первой компиляции
  • Сделайте секундуОптимизация на основе первой оптимизации
  • Выполнение третьей оптимизации на основе второй оптимизации

До сих пор я пробовал следующее:

.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 Ответ

2 голосов
/ 16 февраля 2012

Причина - ваша последняя цель, $(O1): $(OC1). То есть каждый O1 зависит от каждого OC1.

Каково действительное значение $(O1)? Это должен быть список или единственная цель?

Я бы попытался заменить это правило шаблоном (если это возможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...