Как включить префикс пути в шаблонное правило GNU Make

Учтите следующее:

%.foo: %.bar
    echo 
%.foo: %.bar
    echo $< > $@ 
lt; > $@

Предполагая, что у нас есть один файл1.bar, команда выполнена простоecho 1.bar > 1.foo, Однако когда% содержит путь, а не просто имя файла, он начинает становиться привередливым. Моя проблема в том, что я хочу проложить другой путь к%.barшаблон становится полностью искаженным. Т.е. когда%.bar являетсяnice/path/1.bar, это становится невозможным:

%.foo: /project/something/%.bar
    echo 
%.foo: /project/something/%.bar
    echo $< > $@
lt; > $@

Это будет работать, но выполняетсяecho nice/path//project/something/1.bar > 1.foo вместоecho /project/something/nice/path1.bar > 1.foo

Причина этого в том, как make выполняет свои шаблонные правила. Из документов:

Когда целевой шаблон не содержит косую черту (и обычно ее нет), имена каталогов в именах файлов удаляются из имени файла перед его сравнением с целевым префиксом и суффиксом. [...] Каталоги игнорируются только с целью найти неявное правило для использования, а не в применении этого правила. Таким образом, "e% t" соответствует имени файла src / eat, с "src / a" в качестве основы. Когда предварительные условия превращаются в имена файлов, каталоги из основы добавляются спереди, а остальная часть основы заменяется на «%». Стебель "src / a" с обязательным шаблоном "c% r" дает имя файла src / car

Можно ли как-то отключить это для определенного правила?

Ответы на вопрос(1)

Ваш ответ на вопрос