Точная же командная строка вызывает ошибку в Make еще успешной, если она запускается из оболочки

У меня проблема, что я просто не могу обернуть голову. У меня есть минимальный пример makefile, который должен скомпилировать очень простой файл .c в исполняемую программу.

Когда я запускаю make , компилятор начинает компиляцию, а затем создает сообщение об ошибке

“T: \ printOffsets.c: 10: 21: error: bootIfc.h: нет такого файла или каталога”

Затем я копирую ту же самую командную строку make, которая используется для создания цели и запуска ее непосредственно в том же экземпляре командной оболочки Windows, и внезапная компиляция завершается без ошибок! Командная строка (упрощены названия путей):

T: \ perl \ c \ bin \ gcc.exe T: \ printOffsets.c -IT: \ include \ -o D: \ printOffsets.exe

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

Я не понимаю! Как это возможно?? Как может одна и та же команда работать над оболочкой и сбой при запуске из Makefile?

Кстати, я использую GNU Make 3,82 на Windows 7.

Когда команда в make-файле дает другой результат из оболочки, просто убедитесь, что она использует требуемую оболочку.

Добавьте фиктивную цель в ваш файл make:

.PHONY:testshell testshell: echo $(SHELL) 

И запустите:

 gmake testshell 

Если результат не является вашей любимой оболочкой, вы можете заставить ее добавить строку, такую ​​как в начале вашего файла makefile:

 SHELL=C:\Windows\System32\cmd.exe 

Если вы не уверены в полном пути своей оболочки, просто откройте консоль DOS и запустите:

 where cmd 

Изменить: альтернативное решение

При использовании sh shell вместо оболочки cmd вы также можете заменить все обратные косые черты в командах косой чертой и продолжать использовать sh .

Изменить 2: изменить оболочку для одной цели