2016-06-24 3 views
0

Допустим, у меня есть один каталог с c-файлами (.), и я хочу, чтобы объектные файлы попадали в два разных каталога: debug и release. Теперь я хочу сделать правило для этого. В результате это будет выглядеть примерно так:Однократное правило для нескольких выходных файлов в разных каталогах

$(DEBUGDIR)%.o : %.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

$(RELEASEDIR)%.o : %.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

Это два правила, которые являются точно такими же. Поскольку все возможные различия между этими правилами содержатся в CFLAGS, нет причин даже иметь два правила: я хочу поддерживать только один. Я попытался это:

$(DEBUGDIR)%.o $(RELEASEDIR)%.o : %.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

Но теперь он не будет компилировать о-файлы для RELEASE, когда он уже скомпилированные для DEBUG. Как я могу объединить эти два правила в один?

ответ

1

Вы не можете этого сделать. Правила шаблонов с несколькими целями define a recipe that creates multiple output files when run one time.

Для этого я бы просто написал правило дважды. В качестве альтернативы вы можете ввести рецепт в переменную и использовать его дважды:

COMPILE = $(CC) $(CFLAGS) -c $< -o [email protected] 

$(DEBUGDIR)%.o : %.c 
     $(COMPILE) 

$(RELEASEDIR)%.o : %.c 
     $(COMPILE) 
Смежные вопросы