GNU make не распознает путь в формате POSIX - PullRequest
0 голосов
/ 01 февраля 2020

Вот версия GNU Make, которую я сегодня установил на свой windows 10 p c с помощью инструмента настройки cygwin:

GNU Make 4.2.1
Built for x86_64-unknown-cygwin

У меня есть простой тестовый make-файл:

include /c/temp/vs.mk

Когда я делаю, я получаю следующую ошибку:

makefile:1: /c/temp/vs.mk: No such file or directory
make: *** No rule to make target '/c/temp/vs.mk'.  Stop.

Когда я изменяю строку на

include c:\temp\vs.mk

, она работает.

Я думал любой встроенный в Cygwin GNU make должен распознавать формат пути POSIX вместо Windows формата пути, но этот простой тест показал мне иначе для моей версии GNU Make.

Теперь у меня есть еще один windows 7 p c, который я установил со следующей версией GNU Make длительное время go:

GNU Make 3.81
This program built for i686-pc-cygwin

Когда я тестировал make, работали как формат пути POSIX, так и формат Windows.

Я довольно много искал в Google, но никакая соответствующая информация не объяснила бы мне, почему это произошло.

Ответы [ 3 ]

1 голос
/ 01 февраля 2020

Это не путь POSIX для Cygwin

/c/temp/vs.mk

, чтобы убедиться, что мы можем показать root content

 $ ls -1F /
bin/
cygdrive/
Cygwin.bat*
Cygwin.ico
Cygwin64_Terminal.lnk*
Cygwin-Terminal.ico
dev/
etc/
home/
lib/
proc/
sbin/
srv/
tmp/
usr/
var/

Нет каталога "C"
Где находятся Windows Буквы диска? Они смонтированы в /cygdrive

$ ls -1F /cygdrive
c/
d/
e/

. Этот параметр / поведение используется по умолчанию с момента создания Cygwin.
Когда вам нужно выполнить преобразование между Windows и путем Posix или наоборот, используйте cygpath

$ cygpath -u "c:\temp\vs.mk"
/cygdrive/c/temp/vs.mk 

$ cygpath -w /cygdrive/c/temp/vs.mk
C:\temp\vs.mk
0 голосов
/ 05 февраля 2020

Я выяснил, почему это произошло.

По сути, существует файл cygwinfolder/etc/fstab, который можно изменить, указав префикс пути cygdrive. Префикс пути cygdrive по умолчанию - /cygdrive, и поэтому путь POSIX с префиксом /cygdrive работает для чистой установки, как на моей первой машине. Вот что находится в файле fstab на моей первой машине:

none /cygdrive cygdrive binary,posix=0,user 0 0

На моей второй машине я давно изменил этот файл a go и забыл об этом. Для префикса пути cygdrive установлено значение /. Вот что находится в файле fstab:

none / cygdrive binary,posix=0,user 0 0

Для получения дополнительной информации см. https://cygwin.com/cygwin-ug-net/using.html#cygdrive.

0 голосов
/ 01 февраля 2020

Насколько я помню, Cygwin предоставляет свою собственную версию GNU make, которая поддерживает пути Cygwin. Я думаю (не могу вспомнить), что есть изменения кода, необходимые для того, чтобы make GNU работал с путями Cygwin.

Вы, вероятно, должны описать, как вы создали эту версию GNU make, и вам следует удалить makefile добавьте теги к этому вопросу и добавьте теги gnu-make и cygwin ... некоторые люди, знакомые с Cygwin, могут помочь.

...