формировать имя цели и зависимости - PullRequest
0 голосов
/ 29 января 2012

Вы можете увидеть первую проблему здесь , она была решена, спасибо Эльдару Абусалимову. Теперь мне нужно поставить правильные цели и зависимости для вызова uic.exe. Начало кода:

ui_files := $(wildcard $(SUBDIRS:%=%/*.ui))
ui_headers := $(foreach ui_files,$(ui_files),$(dir $(ui_files))ui_$(notdir $(ui_files:.ui=.h)))
ui_cpp := $(patsubst %.h, %.cpp, $(ui_headers))

Во-первых, мне нужно сгенерировать заголовки, что я пытался сделать с помощью этого кода:

<directory/ui_<ui_file_name>.h>: <ui_file_path>
    $(QT_BIN)/uic -o $@ $< 

Во-вторых, я генерирую cpps:

<directory/ui_<ui_file_name>.cpp>: <ui_file_path> <header_file_path>
$(QT_BIN)/uic -i <header_file_path> -o <target> <ui_file_path>

Помогите мне, пожалуйста, заполнить этот синтаксис not-make синтаксисом make или дать мне подходящий метод.

Спасибо.

1 Ответ

1 голос
/ 29 января 2012

Полагаю, это должно быть примерно так (однако я не уверен, как Make будет работать с частью каталогов файлов):

$(ui_headers) : ui_%.h : %.ui
    $(QT_BIN)/uic -o $@ $< 

$(ui_cpp) : %.cpp : %.ui ui_%.h
    $(QT_BIN)/uic -i $(word 2,$^) -o $@ $<

Оба правила являются статическим шаблоном правил.

UPD.

Правило статического шаблона здесь не годится, потому что шаблон применяется ко всему имени файла (с путем). Вместо этого следует использовать обычные шаблонные правила :

ui_%.h : %.ui
    $(QT_BIN)/uic -o $@ $< 

%.cpp : %.ui ui_%.h
    $(QT_BIN)/uic -i $(word 2,$^) -o $@ $<

Как соотносятся паттерны * Глава 1016 * объясняет, как это работает:

Если целевой шаблон не содержит косую черту (и обычно ее нет), имена каталогов в именах файлов удаляются из имени файла перед его сравнением с целевым префиксом и суффиксом. После сравнения имени файла с целевым шаблоном имена каталогов вместе с косой чертой, которая их завершает, добавляются к обязательным именам файлов, сгенерированным из обязательных шаблонов правила шаблона и имени файла. Каталоги игнорируются только с целью нахождения неявного правила для использования, а не для применения этого правила.

...