2016-09-06 3 views
1

Я медленно пробиваю себе путь через gnu make documentation jungle (хотя это отлично - просто много).

я столкнулся шаблон правил:

%.png: file1 file2 
    run command here 

Там также подстановочные знаки использовать в качестве мишеней:

FILES = $(wildcard *.png) 

Теперь я мог бы написать:

$(FILES): file1 file2 
    run command here 

Есть ли разница между первый и второй варианты использования?

+0

Очень умный вопрос! –

ответ

2

В случае %.png: Если какое-либо другое правило, в свою очередь, запрашивает какой-либо файл, который сам не имеет явного правила, но заканчивается на .png, тогда это правило будет вызываться.

Так, %.png: %.jpeg (к примеру) говорит, «если не будет более конкретное правило, здесь, как конвертировать из JPEG в PNG изображения.»

$(FILES) является перечисляя список зависимостей, которые вы могли бы хотите создать. На самом деле это не похоже на цель правила, а скорее на зависимости одного.

Например, фальшивая цель, такая как images.zip: $(FILES), может быть использована, чтобы сказать, что все $(FILES) должно быть актуально перед тем, как сделать images.zip.

Использование подстановочных источников, конечно, скорее «опасно», так как отсутствующие файлы не будут обнаружены make, поэтому можно получить «ложно положительный» результат сборки.

+0

Есть ли проблема с использованием '$ (FILES)' в качестве цели, если правило генерирует все цели? – Xiphias

+0

Он будет работать (по крайней мере, в GNU Make), но только в том случае, если одно выполнение правила создает * все * именованных целей, тогда как '% .png' создает * one * target при ходу. – BRFennPocock

+0

Большое спасибо за разъяснение этого. Это мне очень помогает. –

Смежные вопросы