Я пытаюсь выяснить, почему простая команда 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

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

1 ответ1

1

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

Похоже, что все команды рецепта в make-файле являются исключительно командами оболочки, если в PATH указан файл sh.exe. Они не могут быть командами 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. Если модератор может переместить или удалить это сообщение, пожалуйста, сделайте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .