Makefile не работает, когда CygWin в пути

855
DavidPostill

Я пытаюсь выяснить, почему простая команда Windows в make -файле дает сбой, только когда двоичная папка CygWin включена в переменную PATH.

Чтобы вывести большинство переменных из уравнения, я использую базовый make-файл ниже:

clean: del /F /Q file.txt 

Я использую GNU make 3.81 из каталога, который содержит только make.exe и makefile .

C:\temp\test>dir /b make.exe makefile  C:\temp\test>make -v 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 Windows32 

Когда PATH включает двоичную папку Cygwin, я получаю ошибку ProcessCreate ().

C:\temp\test>path=c:\tools\cygwin\bin  C:\temp\test>make clean del /F /Q file.txt process_begin: CreateProcess(NULL, del /F /Q file.txt, ...) failed. make (e=2): The system cannot find the file specified. make: *** [clean] Error 2 

Работает как положено, иначе.

C:\temp\test>set path=  C:\temp\test>make clean del /F /Q file.txt Could Not Find C:\temp\test\file.txt 

Это не имеет смысла для меня.
Есть идеи, что здесь может происходить?

0
Я думаю, я знаю, в чем проблема здесь. Я не даю вам ответ (потому что это неправильный сайт для этого вопроса, и я не хочу предлагать больше вопросов на неправильном сайте), но я предлагаю вам посмотреть, что делает `PATH`, тогда Посмотрите каталог `cygwin / bin`. wizzwizz4 7 лет назад 2

1 ответ на вопрос

1
Hector Psih

Я добился определенного прогресса после нескольких экспериментов и чтения. Я думаю, что теперь я понимаю логику.

Похоже, что все команды recipe в make-файле являются исключительно командами оболочки, если sh.exe включен в PATH. Они не могут быть командами Windows.

После удаления sh.exe из cygwin/binисходного make-файла работал как я ожидал. «cmd» также может быть явно указан вместо «sh» по умолчанию в make-файле следующим образом:

clean: cmd /c 'del /F /Q file.txt' 

Если это правильно, это немного разочаровывает. Имея cygwin/binв 'PATH', я предполагал, что в make-файле можно использовать любой тип команд, как в командах Windows или в командном файле.

Что по-прежнему не имеет большого смысла для меня, так это то, что команды windows работают, когда sh.exe недоступен. Все еще отсутствует часть логики.

(извините за публикацию на неправильном сайте, подумал, что я был на stackoverflow. Если модератор может переместить или удалить это сообщение, пожалуйста, сделайте.

Я перенес это в Super User, потому что он принадлежит здесь, а не [так] (это не вопрос программирования). Если вы тот же пользователь, который разместил этот вопрос, пожалуйста, убедитесь, что вы вошли в систему, прежде чем публиковать в будущем. wizzwizz4 7 лет назад 0