2016-03-01 3 views
0

У меня есть следующие цели в моем Makefile, чтобы генерировать иконки для моего Android приложения:Как я могу параметризовать создание целей?

base_icon := icon-base.png 

Icon-ldpi.png: $(base_icon) 
    convert $< -resize 36x36 -unsharp 1x4 [email protected] 

Icon-mdpi.png: $(base_icon) 
    convert $< -resize 48x48 -unsharp 1x4 [email protected] 

Icon-hdpi.png: $(base_icon) 
    convert $< -resize 72x72 -unsharp 1x4 [email protected] 

Icon-xhdpi.png: $(base_icon) 
    convert $< -resize 96x96 -unsharp 1x4 [email protected] 

Icon-xxhdpi.png: $(base_icon) 
    convert $< -resize 144x144 -unsharp 1x4 [email protected] 

Icon-xxxhdpi.png: $(base_icon) 
    convert $< -resize 192x192 -unsharp 1x4 [email protected] 

icons_android: \ 
    Icon-ldpi.png \ 
    Icon-mdpi.png \ 
    Icon-hdpi.png \ 
    Icon-xhdpi.png \ 
    Icon-xxhdpi.png \ 
    Icon-xxxhdpi.png 

Как я могу сделать это более элегантно, не повторяя инструкции конвертировано снова и снова?

То, что я искал было с каким-то параметризованной целью:

Icon-%.png: $(base_icon) 
    convert $< -resize $(size) -unsharp 1x4 [email protected] 

Но я не уверен, как для поиска в $(size) для данного значка. Есть ли какие-то карты, которые я могу определить в Makefile и искать в целевом?

+2

Вы, наверное, могли бы это сделать, если вы внедренный размер (например, 72) в имени. Гораздо сложнее преобразовать 'l' в 32,' m' в 48, 'h' в 72,' xh' в 96, 'xxh' в 144 и' xxxh' в 192. –

+0

К сожалению, Android требует, чтобы имена файлов точно так же, как указано выше. – tyrondis

+0

Это мягко раздражает (для Android требуются имена, как показано). В среде Unix я бы написал сценарий оболочки, который сделал сопоставление имен. Кажется вероятным, что вам всегда нужно будет восстановить все значки (если, я полагаю, только один из них был удален, если главный файл изменится, все они должны быть воссозданы), поэтому я, вероятно, просто запустил скрипт с базовым именем и регенерировать все файлы каждый раз. Я не уверен, что это поможет вам в среде разработки Android. –

ответ

1

Try следующий пример, хотя он не идеален,

base_icon := icon-base.png 

define icon_template 
Icon-$(1).png: $$(base_icon) 
     convert $$< -resize $(2) -unsharp 1x4 [email protected] 
icons_android: Icon-$(1).png 
endef 

$(eval $(call icon_template,ldpi,36x36)) 
$(eval $(call icon_template,mdpi,48x48)) 
$(eval $(call icon_template,hdpi,72x72)) 
+0

Уже намного лучше, чем я получил, спасибо! Теперь, если бы был только способ создания этой цели «icons_android» динамически ... – tyrondis

+0

Конечно. Кстати, что означает «построить цель динамически»? – Eric

+0

Не повторяйте снова все значки, но как-то создайте список из 'icon_template'calls и используйте это. – tyrondis

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