Выход из двоеточий в именах файлов в Make-файле

Существует ли способ добраться, GNU делают для работы правильно с именами файлов, которые содержат двоеточия?

Определенная проблема, с которой я сталкиваюсь, оказывается, включает правило шаблона. Вот упрощенная версия, которая не зависит от вырезания и вставления символов табуляции:

% make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu
% cat Makefile
COLON := \:
all: ; true
%.bar: ; cp $< $@
x.bar: x.foo
%.foo: ; touch $@
a$(COLON)b.bar: a$(COLON)b.foo
all: x.bar a$(COLON)b.bar
clean: ; rm -f *.foo *.bar
% make clean
rm -f *.foo *.bar
% make
touch x.foo
cp x.foo x.bar
cp  a\:b.bar
cp: missing destination file operand after `a:b.bar'
Try `cp --help' for more information.
make: *** [a\:b.bar] Error 1

Замена $ (ДВОЕТОЧИЕ) с литералом: приводит точно к тому же результату. Без обратной косой черты это делает это:

Makefile:6: *** target pattern contains no `%'.  Stop.
16
задан zaphod 12 January 2010 в 21:10
поделиться

2 ответа

Я сомневаюсь, что все возможное: см. Это обсуждение в двонях в тюфилях . Таким образом, GNU Make никогда не работал хорошо с именами файлов, которые содержат пробелы или двоеточие. Сопровождающий, Павел Д. Смит, говорит, что добавление поддержки для сбежания будет стремиться к разбивать существующие макияж . Кроме того, добавление такой поддержки потребует значительных изменений в коде.

Вы можете работать с какой-то неприятным временным расположением файлов.

Удачи!

11
ответ дан 30 November 2019 в 22:49
поделиться

Я не позитив, что это должно работать, но причина это Говорит «отсутствующий файл назначения» прост:

%.bar: ; cp $< $@

Эта строка говорит, что скопируют цель от первой зависимости. Ваш A: B.Bar не имеет любой зависимости , поэтому CP не удается. Что вы хотели, чтобы это копировать? A: B.foo? В этом случае вам понадобится:

%.bar: %.foo ; cp $< $@
0
ответ дан 30 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: