Вызов команд Windows (например, del) из make-файла GNU - PullRequest
8 голосов
/ 17 марта 2010

Невозможно вызвать системные команды Windows (например, del, move и т. Д.) С помощью GNU Make. Я пытаюсь создать make-файл, который не использует пользователя с установленными дополнительными инструментами (например, rm.exe от Cygwin).

При выполнении следующего правила выдается сообщение об ошибке del: command not found:

clean:
   del *.o

Это предположительно потому, что не существует такого исполняемого объекта, как "del". Я также попытался запустить его в качестве опции для cmd, но с этим только кажется, что открывается новое приглашение:

clean:
    cmd /C del *.o

Я использую Windows XP (5.1.2600) с GNU Make 3.79.1, которая входит в состав MSys.

Ответы [ 7 ]

11 голосов
/ 18 марта 2010

Кажется, что переключатель /C необходимо экранировать, потому что / интерпретируется как путь в GNU Make. Следующие работы, как и ожидалось:

clean:
    cmd //C del *.o
4 голосов
/ 17 марта 2010

Вы используете Cygwin? Почему бы не позвонить rm?

3 голосов
/ 17 марта 2010

del - это встроенная команда cmd.exe (как и ранее command.com). Ваша команда cmd /C del *.o должна работать, если она запускает новую командную строку, я подозреваю, что cmd может быть оболочкой. Вы пытались вызвать cmd с полным путем (например, c: /WINDOWS/system32/cmd.exe)?

2 голосов
/ 12 сентября 2016

Поскольку системы на основе DOS имеют две разные команды для удаления файлов и каталогов, я считаю, что лучше всего иметь два разных определения:

ifeq ($(OS),Windows_NT)
    RM = cmd //C del //Q //F
    RRM = cmd //C rmdir //Q //S
else
    RM = rm -f
    RRM = rm -f -r
endif

clean:
    $(RM) $(TARGET).elf $(TARGET).map
    $(RRM) $(BUILD_DIR)
1 голос
/ 30 августа 2017

Со мной тоже случилось. В верхней части вашего make-файла добавьте:

SHELL=cmd

Поскольку вы компилируете в Windows, выберите «cmd» в качестве оболочки по умолчанию. это важно, потому что GNU make будет искать путь для оболочки типа linux / unix и, если найдет ее, будет использовать ее. Это тот случай, когда Cygwin установлен. Побочным эффектом такого поведения является то, что такие команды, как «del» и «echo», не найдены. Если мы скажем GNU make использовать 'cmd' в качестве оболочки, тогда будет доступен 'del' и все такое.

0 голосов
/ 18 января 2016

Другое решение - создать файл del.bat, содержащий:

@echo off
del %*

тогда makefile может просто содержать

clean:
   del *.o

это очищает make-файл, но может немного загромождать каталог сборки.

0 голосов
/ 20 января 2015

Ответ Тома Лонгриджа был для меня близок к правде, но для выхода из него нужно было использовать обратную косую черту перед прямой косой чертой на компьютере с Windows Vista Business, для которого я нуждался в этом:

RM=cmd \/C del
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...