Команда make работает windows

make не распознается как внутренняя или внешняя команда, работающая программа или командный файл — Windows 7

У меня Windows 7, и я пытался использовать команду «make», но «make» не распознается как внутренняя или внешняя команда.

Я сделал Start -> cmd -> run -> make , который выдает:

‘make’ не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Затем я набрал «mingw32-make» вместо «make» ( Start -> cmd -> run -> mingw32-make ) и получил такой же вывод:

«mingw32-make» не распознается как внутренняя или внешняя команда, работающая программа или командный файл.

Что мне делать дальше, чтобы решить эту проблему?

9 ответов

Скорее всего, ваша проблема в том, что оболочка не знает, где найти вашу программу make . Если вы хотите использовать его откуда угодно, то вы должны сделать это, иначе вам нужно будет добавлять полный путь каждый раз, когда вы хотите вызвать его, что довольно обременительно. Например:

Это должно быть взято в качестве примера, на XP это выглядело примерно так, я не могу сказать на W7. Но gnuwin32 использовался для предоставления полезных пакетов «linux-world» для Windows. Проверьте информацию о вашем поставщике для получения.

Поэтому, чтобы избежать ввода пути, вы можете добавить путь к переменной окружения PATH . вы легко найдете это . Чтобы убедиться, что он зарегистрирован ОС, откройте консоль (запустите cmd.exe ) и введите $PATH должен предоставить вам список стандартных путей. Проверьте, где находится ваша программа make .

В Windows10 я решил эту проблему, добавив «C: \ MinGW \ bin» в Path, затем вызвал его, используя MinGW32-make not make

  1. Сначала убедитесь, что у вас установлен MinGW.
  2. В менеджере установки MinGW проверьте, установлен ли у вас пакет mingw32-make .
  3. Проверьте, добавили ли вы папку MinGW bin в PATH. введите PATH в командной строке и найдите папку. Или в Windows 10 перейдите в Control Panel\System and Security\System —> Advanced system settings —> Environment Variables —> System Variables найдите Path переменная, выберите Edit и проверьте, есть ли она там. Если не просто добавить это!
  4. Как объяснено здесь , создайте новый файл в любом из ваших PATH папки. Например, создайте mingwstartup.bat в папке bin MinGW. введите строку doskey make=mingw32-make.exe внутри, сохраните и закройте ее.
  5. откройте редактор реестра, запустив regedit . Как объяснено здесь в HKEY_LOCAL_MACHINE или HKEY_CURRENT_USER go \Software\Microsoft\Command Processor щелкните правой кнопкой мыши на правой панели New —> Expandable String Value и назовите его AutoRun . дважды щелкните и введите путь к вашему .bat-файлу в качестве значения данных (например, «C:\MinGW\bin\mingwstartup.bat» ), результат должен выглядеть следующим образом:

теперь каждый раз, когда вы открываете новый терминал, make будет запускать команду mingw32-make.exe . Надеюсь, это поможет.

‘make’ — это команда для UNIX /Linux. Вместо этого используйте команду «nmake» в MS Windows. Или лучше использовать эмулятор, например, CYGWIN.

Я использую Windows 8. У меня была такая же проблема. Я добавил путь «C: \ MinGW \ bin» в системную переменную среды с именем «path», после чего он заработал. Может быть, вы можете попробовать то же самое. Надеюсь, это поможет!

Выполните поиск make.exe с помощью функции поиска, при обнаружении запишите абсолютный путь к файлу. Вы можете сделать это, щелкнув правой кнопкой мыши на имени файла в результатах поиска, а затем в свойствах или открыв папку местоположения (не уверен в точной формулировке, я не использую английскую локаль).

Читайте также:  Samsung ativ smart pc 500t1c драйвера wifi windows 10

Когда вы открываете консоль командной строки (cmd) вместо того, чтобы вводить make , введите полный путь и имя, например, C:\Windows\System32\java (это для Java . ).

В качестве альтернативы, если вы не хотите каждый раз указывать полный путь, у вас есть возможности:

  • сделать C:\Windows\System32\ текущим рабочим каталогом, используя cd на уровне cmd.
  • добавьте C:\Windows\System32\ в переменную окружения PATH.

====== запустите ‘cmd’, так как администратор 2 использует ‘setx’ ===== setx scoop «C: \ Users \% username% \ scoop» /M

======= Этап 3. Создание переменной среды makePath ===

Как уже предлагалось в других ответах, у вас должен быть установлен MinGW . Дополнительная часть заключается в добавлении следующих двух папок в переменную среды PATH .

  • C: \ MinGW \ Bin
  • C: \ MinGW \ MSYS \ 1,0 \ Bin

Очевидно, настройте путь в зависимости от того, где вы установили MinGW. Кроме того, не забудьте открыть новый терминал командной строки.

используйте mingw32-make вместо cmake в windows

Введение в make

Назначение, история, варианты

Утилита make предназначена для автоматизации сборки проектов. Если какие-либо файлы проекта могут быть сгенерированы из других файлов, утилита позволяет выполнить процесс построения наиболее оптимальным способом, по возможности минимизируя количество обрабатываемых файлов.

Исторически утилита предназначалась для сборки проектов на языке C в операционной системе Unix, однако может быть использоваться для работы с любыми проектами. Первая версия системы была создана в 1977 году.

На сегодняшний день наиболее распространены три варианта утилиты, объединенные общими принципами работы, но отличающиеся синтаксисом языка и возможностями:

Мы работаем с GNU make. На BSD системах (в частности, FreeBSD, он может быть доступен как gmake, на Linux — просто make).

Основные принципы

Утилита make работает по правилам (rules), записанным в специальном конфигурационном файле. Правила определяют цели (targets), завимости между целями и набор команд для выполнения каждой цели.

Цели могут соответствовать определенным файлам. Кроме того, цели могут не соответствовать ни одному файлу и использоваться для группировки других целей или определенной последовательности команд. Такие цели называются phony targets.

Каждая цель может зависеть от выполнения других целей. Выполнение цели требует предварительного выполнения других целей, от которых она зависит.

В случае зависимости между целями, соответствующими файлам, цель выполняется только в том случае, если файлы, от которых она зависит, новее, чем файл, соответствующий цели. Это позволяет перегенерировать только файлы, зависящие от измененных файлов, и не выполнять потенциально долгий процесс пересборки всех файлов проекта.

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

Запуск make

Несмотря на то, что для make можно указать произвольный файл правил, как правило используют стандартное имя Makefile . Поддерживаются также несколько альтернативных имен по умолчанию, но имеет смысл использовать наиболее распространенное.

будет использовать файл Makefile , находящийся в текущем каталоге.

При запуске make можно указать цель, которая будет выполнена. Если цель не указана, используется цель по умолчанию, которая либо указана в файле правил явно, либо неявно используется первая определенная цель.

Явное указание цели выполняется инструкцией DEFAULT_GOAL в Makefile :

вызовет обработку цели clean файла Makefile , находящегося в текущем каталоге.

Можно указать сразу несколько целей.

Выполнение целей может быть настроено с использованием переменных (о которых ниже). При запуске make можно указать значения переменных:

Значение переменной PREFIX будет доступно в правилах Makefile и может быть использовано при сборке.

Команда поддерживает также ряд дополнительных опций, из которых наиболее важные следующие:

Базовый синтаксис make

Основная конструкция, используемая в файлах make , выглядит следующим образом:

Читайте также:  Астра линукс отключение спящего режима

Этот фрагмент определяет, что файл style.css зависит от файла src/less/app.less и для его сборки необходимо выполнить команду lessc src/less/app.less > style.css . Перегенерация файла style.css будет выполняться только в случае,если файл src/less/app.less новее, чем файл style.css (до тех пор, пока при запуске make не будет указан ключ -B ).

Перед каждой командой внутри описания цели должен присутствовать символ табуляции. В принципе, это настраивается, но лучше использовать общепринятые соглашения. Если вместо табуляции используются пробелы, make работать не будет.

В качестве команд обработки целей используются команды shell. Текст команды выводится, для того, чтобы он не выводился, команду необходимо начать с символа @ .

Каждая команда запускается в отдельном интерпретаторе shell, таким образом, команды не связаны друг с другом. Иначе говоря, одна строка команды — один shell. Это поведение может быть переопределено с помощью специальной цели .ONESHELL .

Если команду (или список зависимостей) необходимо записать в несколько строк, используют символ переноса \ .

PHONY targets

Цели, не соответствующие файлам, и предназначенные для выполнения набора команд или группировки завимостей, декларируются следующим образом:

Деклараций .PHONY может быть несколько, обычно определяют одну и прописывают туда все соответствующие цели.

В нашем примере вызов make clean приведет к выполнению цели clean , которая безусловно выполнит удаление временных файлов.

В случае, если у phony target есть зависимость в виде другой phony target, то зависимость выполняется перед зависящей целью. Таким образом, мы получаем механизм, напоминающий подпрограммы. Например, мы можем определить цель all , собирающую все файлы проекта, и отдельные цели css , js и php , собирающие отдельной css -файлы, js -файлы и обрабатывающие php файлы.

Соответственно, в Makefile мы можем написать:

В результате мы можем использовать make all для пересборки всех файлов и, скажем, make css для пересборки только CSS -файлов.

Переменные

В make-файле можно использовать переменные, хотя правильнее сказать, что можно использовать макросы.

Переменные определяются присваиванием в makefile или могут быть переданы извне.

Переменные — это макроопределения, причем вычисление переменной всегда выполняется в самый последний момент перед подстановкой. Макросы могут использовать везде в тексте makefile.

Подстановка выполняется конструкцией $(VAR) в отличие от shell, где используется $VAR .

Если в shell команде используется shell-переменная, необходимо квотить знак $ , дублируя его, например:

Помимо макропеременных существуют и более традиционные, в которых значение устанавливается сразу. Для работы с ними используется оператор := . В наших условиях достаточно использовать обычные переменные.

Часто требуется определить переменную только в том случае, если она еще не была определена. Для этого используется оператор ?= :

Соответственно, если мы вызовем

будет использована кодировка UTF8 , а в случае

будет использована CP1251 .

Если переменная содержит несколько строк, можно использовать синтаксис define :

Автоматические переменные

Make поддерживает набор автоматических переменных, облегчающих написание правил. Например, переменная $@ соответствую текущей цели (то, что слева от : ), а переменная $^ — списку зависимостей (то, что справа от : ). Таким образом, например, можно написать:

В результате www/js/script.js будет результатом объединения трех js-файлов.

Полный список таких переменных приведен в документации, для нас наиболее интересны:

С полным списком можно ознакомиться в документации: Automatic Variables.

Условное выполнение

В Makefile можно использовать условные выражения. Опять же, мы говорим о макрообработке make, соответственно, условные выражения работают на уровне makefile, а не на уровне команд. Обычно условные выражения используются для определения тех или иных целей в зависимости от значения переменных. Например:

В качестве условий можно проверять определенность переменной, а также ее значение:

Полностью с возможностями условных выражений можно ознакомиться в документации: Conditional syntax.

Шаблонные правила

Шаблонные правила (pattern rules) позволяют указать правило преобразования одних файлов в другие на основании зависимостей между их именами. Например, мы можем указать правило для получения объектного файла из файла на языке C:

Читайте также:  Windows требуется файл tlsclient exe

Обратите внимание на использование переменной % , которая в таких правилах используется для получения имени исходного файла.

Шаблоны не обязаны ограничиваться расширениями файлов. Если исходные и выходные файлы соответствуют друг другу и в их именах есть какая-либо зависимость, можно использовать pattern rule.

Включение других файлов make

Файл make может подключить другие файлы make оператором include :

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

Функции

Make определяет большой набор функций, которые могут быть использованы в переменных (макросах). Вызов функции выполняется конструкцией:

Функции позволяют обрабатывать строки, имена файлов, организовывать циклы по набору значений, организовывать условный вызов других функций.

Несколько примеров из hive. Получаем текущее время (обратите внимание на использование := :

Включение файла container.mk только в случае, если он существует:

Добавление префиксов и суффиксов к именам файлов

Подробнее о функциях можно прочитать в документации Functions.

Собственные функции

Можно создавать собственные параметризованные функции путем определения переменных, содержащих специальные переменные $1 , $2 , . соответствующие переданным аргументам. Вызов пользовательской функции производится специальным макросом call :

Очень тупой пример:

Теперь можно написать:

Рекурсивный make

Помимо включения другого файла make, Makefile может выполнить другой файл make в виде отдельного make-процесса.

Это достаточно частая ситуация в случае модульных проектов. Например, для каждой из компонент проекта (сервер, клиент, библиотеки) предусмотрен свой Makefile , при этом есть основной Makefile , задающий набор общих настроек и вызывающий Makefile каждого подпроекта.

Вызов make из Makefile часто называют submake . Для вызова используется переменная $(MAKE) :

Значение этой переменной соответствует пути к программе make , обрабатывающей текущий файл.

Для передачи переменных в вызываемый таким образом файл их необходимо явно экспортировать:

Значение переменной PREFIX будет доступно в subsystem/Makefile .

Параллельный make

Make умеет распараллеливать выполнение правил. Для этого используется опция -j , позволяющая указать количество используемых параллельных процессов. Помимо ускорения процесса сборки эта особенность иногда позволяет реализовывать на коленке очень простые сценарии обработки, подразумевающие многозадачность. Например, можно реализовать простой, но работоспособный менеджер очередей на make, используя файлы для хранения заданий и каталоги для хранения файлов заданий на разных стадиях (ожидание, выполнение, результат).

Параллельное выполнение может быть запрещено с помощью специальной цели .NOTPARALLEL .

Специальные цели

Make поддерживает набор целей, которые могут быть использованы как модификаторы для последующих целей либо как служебные инструкции. Вот некоторые из таких специальных целей:

Варианты использования

Чаще всего о make говорят в контексте сборки программ на C/C++, в конце концов, для этого он изначально предназначался. Однако, make ­— гораздо более универсальный инструмент. Записывая makefile, мы декларативно описываем определенное состояние отношений между файлами, которое каждый запуск make будет стараться поддерживать. Декларативный характер определения состояния очень удобен, в случае использования какого-либо императивного языка (например, shell) нам приходилось бы выполнять большое количество различных проверок, получая на выходе сложный и запутанный код.

Кроме того, использование зависимостей между phony targets, позволяющии, по сути, декларативно описывать некий (ограниченный) конечный автомат, может быть полезно для написания различных административных сценариев. Используя make в качестве каркаса для выполнения различных shell-команд, мы получаем по сути некий базовый framework для shell с готовым пользовательским интерфейсом (вызов make + передача переменных), встроенными средствами отслеживания зависимостей, параллельного выполнения, макроопределениями и т.д.

Поэтому базовое знание make позволяет в ряде случаев решить проблему пусть и не самым красивым, но зато быстрым и достаточно надежным способом.

Оцените статью