automake / gnu заставляет работать с каталогами по шаблонным правилам - PullRequest
1 голос
/ 07 марта 2012

Когда я создаю шаблонное правило или какое-то другое пользовательское правило, мне нужно иметь возможность работать с целевым каталогом, который не существует.Это для случая, когда проект создается в каталоге, отличном от самого исходного каталога.

Например:

%.out: %.in
   gen_file.sh $< > $@

Проблема в том, что кто-то указывает путь в зависимости:

some_target: some/path/sample.out

Сбой, потому что каталог some/path не существует.

Существует ли стандартный способ создания этого каталога?

ПРИМЕЧАНИЕ: Сейчас я пытаюсь использовать mkdir, но возникают проблемы с получением имени каталога, а не имени файла.Вероятно, просто уйти от проблемы.Обновление: Получил это, чтобы работать с @mkdir -p $(shell dirname $@) Это, вероятно, не переносимо.

1 Ответ

2 голосов
/ 08 марта 2012

Способ automake делает это, заставляя все, что может зависеть от несуществующего каталога, зависеть от цели some/dir/.dirstamp. Следующее правило шаблона должно охватывать это:

%/.dirstamp:
        mkdir -p $(@D)
        touch $@

Обратите внимание также на использование $(@D) для получения каталожной части $@. Это означает, что вам не нужно использовать $(shell dirname $@) (или встроенную в GNU Make $(dir $@)). Подробнее см. Руководство по GNU Make .

...