Зависимости в Makefile

Предположим, у меня есть Makefile:

all: $(BINARY)

$(BINARY): $(OBJS) $(DEBUG_OBJS)
    #Link objects here

$(OBJS): headers
    #Compile code into objects without debug option

$(DEBUG_OBJS): headers
    #Compile code into objects with debug option

headers:
    #Create on-the-fly header files

Как видите, цель headers требуется как для $(OBJS), так и для $(DEBUG_OBJS). Вопрос в том, будет ли headers вызываться дважды? Кроме того, будет ли приведенный ниже код равным/эквивалентным приведенному выше:

all: $(BINARY)

$(BINARY): headers $(OBJS) $(DEBUG_OBJS)
    #Link objects here

$(OBJS): 
    #Compile code into objects without debug option

$(DEBUG_OBJS): 
    #Compile code into objects with debug option

headers:
    #Create on-the-fly header files

в этом случае заголовки будут вызываться перед $(OBJS) и $(DEBUG_OBJS) с помощью $(BINARY)?


person Sagar    schedule 01.12.2010    source источник


Ответы (1)


Нет, headers будет выполнено только один раз.

Вы можете написать простой make-файл, чтобы протестировать его:

all: foo bar

foo: baz

bar: baz

baz:
        echo 'hi'

При выполнении make hi будет повторяться только один раз.

И в вашем втором случае make видит, что $(BINARY) сначала зависит от headers, поэтому он идет и делает headers перед другими зависимостями.

person codaddict    schedule 01.12.2010