Makefile Windows: .. не распознается как внутренняя или внешняя команда при смене каталога - PullRequest
0 голосов
/ 31 января 2019

Я вижу странную проблему при попытке изменить каталог изнутри Makefile в Windows.Мой псевдокод выглядит следующим образом: -

all:
    cd ../ProjectDir && ../AutoExc InputFile.h

Где AutoExc - это исполняемый файл, который я имею в родительском каталоге.Когда я запускаю 'make' из командной строки, я вижу следующий вывод: -

cd ../ProjectDir && ../AutoExc InputFile.h
'..' is not recognized as an internal or external command.

Странно то, что работает этот точный Makefile в Linux.Я также попытался запустить вышеупомянутую команду из командной строки в Windows, и она сработала, поэтому, например, нет проблемы с «cd».

Есть идеи, почему это происходит и что я могу сделать, чтобы заставить его работать?Если есть проблема с версией Make, есть ли другой более надежный механизм для изменения каталога и запуска исполняемого файла в Windows?

Я использую Make version 3.81 в Windows 7 (последняя версия) и Make version 4.1 в Linux 4.15.0-20-generic # 21-Ubuntu.У меня установлен 'cd' как часть 'Git для Windows', версия git - 2.16.1.windows.4.

1 Ответ

0 голосов
/ 31 января 2019

Ваша команда содержит символы оболочки и передается в cmd.exe:

>cd ../Public &&  ../test
'..' is not recognized as an internal or external command,
operable program or batch file.

>cd ../Public &&  ..\test
'..\test' is not recognized as an internal or external command,
operable program or batch file.

т.е. cmd.exe интерпретирует ../test как команду .. с параметром /test.

Я полагаю, что одним из решений было бы применить макрос к именам команд с путями, например ( note : не проверено, только что напечатано из моей головы):

if (...I'm running under Windows...)
  convert_path = $(subst /,\\,$(1))
else
  convert_path = $(1)
endif

all:
    cd ../ProjectDir && $(call convert_path,../AutoExc) InputFile.h

или, если возможно, использоватьпредложение из комментариев SHELL := /bin/sh или любой другой правильный путь к UNIX-совместимой оболочке в вашей среде Windows.«Git for Windows» - это AFAIR, основанная на MinGW, поэтому вы должны иметь bash в наличии.

...