Использование переменных окружения для формирования путей в Make и окнах - PullRequest
1 голос
/ 15 марта 2012

У меня есть файл make, и я пытаюсь использовать его для копирования файлов в каталог.Путь к каталогу хранится в переменной среды.Проблема в том, что когда я запускаю, сделать C: \ Data из переменной среды интерпретируется как C: DataКак мне остановить это, будучи истолкованным как escape-персонаж?

copyData : buildData
cp Release/*.tbl $(DATA)/index

results in:

cp Release/*.tbl C:\Data/index
cp: `C:Data/index': specified destination directory does not exist
Try `cp --help' for more information.

1 Ответ

4 голосов
/ 16 марта 2012

На самом деле использование прямой косой черты - лучшее и правильное решение. Утилиты Windows всегда поддерживают прямую косую черту, так что это работает, и попытка не забыть всегда указывать имена путей во избежание проблем с обратной косой чертой является большой проблемой.

В этом случае первое, что следует отметить, это то, что проблема не в make. make передает правильный контент в оболочку; это shell , который анализирует обратную косую черту как escape-символ.

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

copyData : buildData
        cp Release/*.tbl '$(DATA)'/index

исправит вашу непосредственную проблему.

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

QDATA = '$(DATA)'

затем не забудьте использовать $(QDATA) там, где вы хотели получить указанное в кавычках значение:

copyData : buildData
        cp Release/*.tbl $(QDATA)/index

PS. Используйте косые черты! : -)

...