2009-09-09 1 views
0

У меня есть makefile.как сделать дикий символ% работать в правилах makefile

Мне нужно создать набор целей под C:/bin/из исходных файлов под src1 и src2.

пусть они будут обязаны в порядке сказать

$ {DEST_DIR}/ао $ {DEST_DIR}/Ьо $ {DEST_DIR}/со $ {DEST_DIR}/сделать

в некоторой части Makefile

DEST_DIR = C:/бен

SRC_DIR1 = C:/src1

SRC_DIR2 = C:/источник2

и я имею правила для них следующим образом

# Правило № 1

$ {DEST_DIR} /% O:.. $ {SRC_DIR1} /% с

#the command required to build the target 
    echo "Source: $< Target: [email protected] " 

правило #rule # 2

$ {DEST_DIR} /% о:.. $ {SRC_DIR2} /% с

#the command required to build the target 
    echo "Source: $< Target: [email protected] " 

Пусть ас и Ьс в SRC_DIR1 и куб.см и d.c в SRC_DIR2

Когда я строю она строит штраф будет править # 1 для a.o и b.o, то правило № 2 для c.o и d.o

Я не ожидал, что это будет хорошо. Потому что я ожидал, что он отправится за правилом № 1 для c.o и выбросит ошибку, говоря «no rule to make target c.c». Но он идет для правила №2 и строит c.o из c.c в SRC_DIR2.

Может кто-нибудь объяснить мне, как это работает? Как работает символ дикой карты % и как происходит совпадение правил?

ответ

1

Make не разрешит два набора команд для, скажем, a.o, но это позволит перекрывать правила шаблонов, даже если целевой шаблон будет точно таким же.

Когда вы запрашиваете c.o, поскольку для «c.o» нет определенного правила, make просматривает правила шаблона для соответствия. От the GNU make manual: «Чтобы применить правило шаблона, его целевой шаблон должен соответствовать рассматриваемому имени файла, и все его предпосылки (после подстановки шаблона) должны указывать файлы, которые существуют или могут быть созданы». Поэтому первое правило не применяется и делает переход на второй, что и происходит.

+0

спасибо большое Бета .. я получил это .. – tamizhan