Ошибка: make: *** Нет правила для создания целевого `makefile'. Останавливаться. используя Powershell и Gnuwin32

Я работаю над учебником/книгой по кодированию под названием Curious Moon. Одно из заданий — нормализовать и загрузить данные из CSV-файла, помещенного в таблицу Postgres. Имя базы данных — «enceladus», а имя таблицы — «master_plan». Мне сказали использовать make для этого. Я не могу понять, как запустить Makefile в PowerShell.

Я установил GNUWin32 с make.exe на свой ноутбук с Windows под управлением Windows 10. Я использовал PowerShell для запуска make.exe. Я сделал это, запустив notepad $profile и сохранив New-Item alias:make -Value 'C:\Program Files (x86)\GnuWin32\bin\make.exe' в файле. Я дал ему новый псевдоним, потому что получал сообщение об ошибке. Теперь, когда я вызываю псевдоним следующим образом:

PS C:\Users\Sabrina> make

Я получаю эту ошибку:

make: *** Цели не указаны и make-файл не найден. Останавливаться.

Я написал Makefile в возвышенном виде и сохранил его как расширение makefile. Он находится в той же папке «C:\Program Files (x86)\GnuWin32\bin», что и make.exe, и называется Makefile. Я попытался запустить его как

PS C:\Users\Sabrina> make -f Makefile

а потом получаю ошибку

make: Makefile: Нет такого файла или каталога

Я не уверен, как заставить make-файл открываться и запускаться.

Это мой код в Makefile:

DB=enceladus
BUILD=${CURDIR}/build.sql
SCRIPTS=${CURDIR}/scripts
CSV='${CURDIR}/data/master_plan.csv'
MASTER=$(SCRIPTS)/import.sql
NORMALIZE = $(SCRIPTS)/normalize.sql
all: normalize
    psql $(DB) -f $(BUILD)
master: 
    @cat $(MASTER) >> $(BUILD)
import: master 
    @echo "COPY import.master_plan FROM $(CSV) WITH DELIMITER ',' HEADER CSV;" >> $(BUILD)
normalize: import
    @cat $(NORMALIZE) >> $(BUILD)
clean:
    @rm -rf $(BUILD)

person tealcoding    schedule 22.01.2019    source источник
comment
Вы абсолютно уверены, что имя файла просто Makefile (или makefile; регистр здесь не имеет значения)? Я подозреваю, что когда вы говорите сохранил его как расширение make-файла, к имени файла добавляется расширение, например .mk или .mak, или что-то в этом роде. В вашем powershell запустите dir makefile*.* и посмотрите, что он напечатает.   -  person MadScientist    schedule 22.01.2019
comment
Ничего не происходит, когда я это делаю. Когда я нажимаю ввод, появляется вот что: PS C:\Users\Sabrina>   -  person tealcoding    schedule 27.01.2019
comment
Похоже, действительно, созданный вами Makefile находится не в этом каталоге. Это означает, что это не сработает. Make просматривает каталог, в котором вы находитесь, когда запускаете make, а не каталог, в котором находится исполняемый файл make.   -  person MadScientist    schedule 27.01.2019


Ответы (1)


Makefile находится в C:\Program Files (x86)\GnuWin32\bin, но ваш текущий рабочий каталог — C:\Users\Sabrina. При запуске make или make -f Makefile команда ищет Makefile в текущем рабочем каталоге, а не в каталоге, где находится исполняемый файл.

Поместите Makefile в ваш текущий рабочий каталог, и проблема исчезнет.

Move-Item 'C:\Program Files (x86)\GnuWin32\bin\Makefile' .
make
person Ansgar Wiechers    schedule 22.01.2019
comment
не лучше ли скопировать? Также не все понимают ., возможно, используют .\ или .\Makefile. - person Robert Cotterman; 22.01.2019
comment
Как переместить Makefile? Я не уверен, правильно ли я сделал, я просто скопировал и вставил make-файл в C:\Users\Sabrina. И тут я получил ошибку Move-Item : Access to the path is denied. At line:1 char:1 + Move-Item 'C:\Program Files (x86)\GnuWin32\bin\Makefile' . + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (C:\Program File...32\bin\Makefile:FileInfo) [Move-Item], Unauthorized AccessException + FullyQualifiedErrorId : MoveFileInfoItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.MoveItemCommand - person tealcoding; 27.01.2019
comment
А потом 'cat' is not recognized as an internal or external command, operable program or batch file. make: *** [master] Error 1 - person tealcoding; 27.01.2019
comment
@tealcoding 1-я ошибка: у вашего пользователя нет прав на запись ни в исходную, ни в целевую папку. Предоставьте недостающие разрешения или запустите команду от имени пользователя, обладающего достаточными привилегиями. 2-я ошибка: Makefile где-то использует команду cat, но в вашей системе нет этой команды ни в одном из каталогов, перечисленных в переменной окружения PATH. Включите путь к команде cat в PATH или замените cat на type в Makefile. - person Ansgar Wiechers; 28.01.2019