- Как запустить make файл в Windows?
- Что такое Makefile и как начать его использовать
- Введение
- Что такое make и Makefile
- Синтаксис Makefile
- Продвинутое использование
- Фальшивая цель
- Последовательный запуск команд и игнорирование ошибок
- Переменные
- Заключение
- Дополнительные материалы
- Cognitive Waves
- Structured Random Thoughts
- Makefiles in Windows
- serialhex / Makefile
Как запустить make файл в Windows?
У меня есть некоторые демо, которые я загрузил, и у них есть Makefile.win и Makefile.sgi. Как я могу запустить их в Windows для компиляции демонстраций?
Если у вас есть Visual Studio, запустите командную строку Visual Studio в меню “Пуск”, перейдите в каталог, содержащий Makefile.win , и введите следующее:
Вы также можете использовать обычную командную строку и запустить vsvars32.bat(c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools для VS2008). Это создаст среду для запуска nmake и найдет инструменты компилятора.
Отъезд cygwin, среда Unix для Windows
Отъезд GnuWin make, который предоставляет собственный порт для Windows (без необходимости полная среда выполнения, такая как Cygwin)
Вот мой быстрый и временный способ запуска Makefile
- скачать сделать из SourceForge: gnuwin32
- установите его
- перейдите в папку установки
- скопируйте все файлы в корзину в папку , содержащую Makefile
- откройте cmd (вы можете сделать это с помощью правого клика со сдвигом) в папке, содержащей Makefile, и запустить
Кроме того, вы можете добавлять аргументы после команды, например
С Visual Studio 2017 мне пришлось добавить эту папку в мою переменную env для Windows 10:
Там также HostX86
Во-первых, добавьте путь к общим инструментам визуальной студии ( c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools ) в системный путь. Чтобы узнать, как добавить путь в системный путь, ознакомьтесь с этим сайтом:
http://www.computerhope.com/issues/ch000549.htm. Вам просто нужно это сделать один раз.
После этого, когда вам нужно, откройте командную строку и выполните vsvars32.bat , чтобы добавить все необходимые пути визуальных студийных инструментов в системный путь.
Затем вы можете вызвать nmake -f makefile.mak
PS: Путь общих инструментов визуальной студии может отличаться в вашей системе. Пожалуйста, измените его соответствующим образом.
Если это “NMake Makefile”, то есть синтаксис совместим с NMake, он будет работать.
Часто предоставляются стандартные файлы Makefile для Linux, а NMake выглядит многообещающим. Однако следующая ссылка использует простой файл Makefile Linux и объясняет некоторые основные проблемы, с которыми вы можете столкнуться.
Если вы устанавливаете Cygwin. Убедитесь, что в программе установки выбрано “make”. Затем вы можете запустить следующую команду, если у вас есть Makefile.
Может быть, вы можете попробовать IDE NetBeans.
Этот вопрос может быть старым, но мое решение, которое является самым простым для любого пользователя Windows, я полагаю, не указано в списке.
Шаг 1: Установите менеджер пакетов шоколада для WINDOWS (совместимый с Windows 7+/Windows Server 2003+) здесь
Шаг 2: запустите choco install make
Шаг 3: Прибыль от ухоженного менеджера пакетов. Make будет добавлен в глобальный путь и работает на всех CLI (powershell, git bash, cmd…)
Что такое Makefile и как начать его использовать
Гайд по основам make и Makefile для использования в собственных проектах.
Содержание
Введение
В жизни многих разработчиков найдётся история про первый рабочий день с новым проектом. После клонирования основного репозитория проекта наступает этап, когда приходится вводить множество команд с определёнными флагами и в заданной последовательности. Без описания команд, в большинстве случаев, невозможно понять что происходит, например:
Эти команды являются лишь частью того, что необходимо выполнить при разворачивании проекта. В приведённом примере видно, что команды сами по себе длинные, содержат много флагов, а значит, их трудно не только запомнить, но и вводить вручную. Постоянно вести документацию становится сложнее с ростом проекта, она неизбежно устаревает, а порог входа для новичков становится выше, ведь уже никто не в состоянии вспомнить всех деталей проекта. Некоторые такие команды необходимо использовать каждый день, и даже не один раз в день.
Со временем становится понятно, что нужен инструмент, способный объединить в себе подобные команды, предоставить к ним удобные шорткаты (более короткие и простые команды) и обеспечить самодокументацию проекта. Именно таким инструментом стал Makefile и утилита make . Этот гайд расскажет, как использование этих инструментов позволит свести процесс разворачивания проекта к нескольким коротким и понятным командам:
Что такое make и Makefile
Makefile — это файл, который хранится вместе с кодом в репозитории. Его обычно помещают в корень проекта. Он выступает и как документация, и как исполняемый код. Мейкфайл скрывает за собой детали реализации и раскладывает “по полочкам” команды, а утилита make запускает их из того мейкфайла, который находится в текущей директории.
Изначально make предназначалась для автоматизации сборки исполняемых программ и библиотек из исходного кода. Она поставлялась по умолчанию в большинство *nix дистрибутивов, что и привело к её широкому распространению и повсеместному использованию. Позже оказалось что данный инструмент удобно использовать и при разработке любых других проектов, потому что процесс в большинстве своём сводится к тем же задачам — автоматизация и сборка приложений.
Применение мейка в проектах стало стандартом для многих разработчиков, включая крупные проекты. Примеры мейкфайла можно найти у таких проектов, как Kubernetes, Babel, Ansible и, конечно же, повсеместно на Хекслете.
Синтаксис Makefile
make запускает цели из Makefile, которые состоят из команд:
Но недостаточно просто начать использовать мейкфайл в проекте. Чтобы получить эффект от его внедрения, понадобится поработать над разделением команд на цели, а целям дать семантически подходящие имена. Поначалу, перенос команд в Makefile может привести к свалке всех команд в одну цель с «размытым» названием:
Здесь происходит сразу несколько действий: создание файла с переменными окружения, подготовка базы данных, генерация ключей, установка зависимостей и запуск проекта. Это невозможно понять из комментариев и названия цели, поэтому будет правильно разделить эти независимые команды на разные цели:
Теперь, когда команды разбиты на цели, можно отдельно установить зависимости командой make install или запустить приложение через make start . Но остальные цели нужны только при первом разворачивании проекта и выполнять их нужно в определённой последовательности. Говоря языком мейкфайла, цель имеет пререквизиты:
Задачи будут выполняться только в указанной последовательности и только в случае успеха предыдущей задачи. Значит, можно добавить цель setup , чтобы объединить в себе все необходимые действия:
Теперь развернуть и запустить проект достаточно двумя командами:
Благодаря проделанной работе Makefile, команды проекта вместе с флагами сведены в Makefile. Он обеспечивает правильный порядок выполнения и не важно, какие при этом задействованы языки и технологии.
Продвинутое использование
Фальшивая цель
Использование make в проекте однажды может привести к появлению ошибки make: is up to date. , хотя всё написано правильно. Зачастую, её появление связано с наличием каталога или файла, совпадающего с именем цели. Например:
Как уже говорилось ранее, изначально make предназначалась для сборок из исходного кода. Поэтому она ищет каталог или файл с указанным именем, и пытается собрать из него проект. Чтобы изменить это поведение, необходимо в конце мейкфайла добавить .PHONY указатель на цель:
Последовательный запуск команд и игнорирование ошибок
Запуск команд можно производить по одной: make setup , make start , make test или указывать цепочкой через пробел: make setup start test . Последний способ работает как зависимость между задачами, но без описания её в мейкфайле. Сложности могут возникнуть, если одна из команд возвращает ошибку, которую нужно игнорировать. В примерах ранее такой командой было создание .env-файла при разворачивании проекта:
Самый простой (но не единственный) способ «заглушить» ошибку — это сделать логическое ИЛИ прямо в мейкфайле:
Добавлять такие хаки стоит с осторожностью, чтобы не «выстрелить себе в ногу» в более сложных случаях.
Переменные
Зачастую в команды подставляют параметры для конфигурации, указания путей, переменные окружения и make тоже позволяет этим управлять. Переменные можно прописать прямо в команде внутри мейкфайла и передавать их при вызове:
Переменные могут быть необязательными и содержать значение по умолчанию. Обычно их объявляют в начале мейкфайла.
Некоторые переменные в Makefile имеют названия отличные от системных. Например, $PWD называется $CURDIR в мейкфайле:
Заключение
В рамках данного гайда было рассказано об основных возможностях Makefile и утилиты make . Более плотное знакомство с данным инструментом откроет множество других его полезных возможностей: условия, циклы, подключение файлов. В компаниях, где имеется множество проектов, написанных разными командами в разное время, мейкфайл станет отличным подспорьем в стандартизации типовых команд: setup start test deploy . .
Возможность описывать в мейкфале последовательно многострочные команды позволяет использовать его как «универсальный клей» между менеджерами языков и другими утилитами. Широкая распространённость этого инструмента и общая простота позволяют внедрить его в свой проект достаточно легко, без необходимости доработок. Но мейкфайл может быть по-настоящему большим и сложным, это можно увидеть на примере реальных проектов:
Дополнительные материалы
- Руководство по современному Make — «выжимка» из документации на русском языке;
- Утилита make: полезный универсальный инструмент программиста — видео-версия данного гайда.
Мейкфайлы, использованные при составлении гайда:
Cognitive Waves
Structured Random Thoughts
Makefiles in Windows
A commonly asked question is, “can I use Linux makefiles to build on Windows?”
Often, the simple (and rather naive) answer is “use NMake”. This post explains the nuanced differences between a Linux and Windows Makefile.
NMake is the native Windows alternative to the Linux make utility and the syntax is very similar too. However, let’s see if it can handle the following simple Linux Makefile. The example code can be accessed via GitHub at https://github.com/cognitivewaves/Simple-Makefile.
Start a command prompt which can execute NMake . An easy way is to start a command prompt from Visual Studio ( Tools->Visual Studio Command Prompt ), so that all the necessary environment variables are set. Change directory to where the Makefile exists and run NMake.
The error points to the first problem. It’s easy to fix though as shown in the snippet.
- Compilers are different on Linux and Windows.
Run NMake again after the change.
These warnings and errors indicate the next set of problems, which are more perverse. To fix it, adjust the file as shown in the snippet.
- Libraries are never the same
- Linux uses dash (-) to specify compiler options. Fortunately, Visual Studio allows options to be specified by either a forward slash (/) or a dash (–). But the compiler and linker flags are not exactly the same. There are more differences than similarities.
Run NMake again.
These indicate further problems.
- It doesn’t recognize the Linux built in target names like .PHONY
- Linux commands are obviously not valid in Windows
Finally, to make it work, the following changes have to be made. So Linux makefiles need to be ported to NMake format.
In summary, Linux Makefile s require some manual effort to run on Windows. Some of the options are,
serialhex / Makefile
This is a simple pair of files one can use so that development on Windows is more like Linux. The command is slightly different .\make.bat all instead of make all when you’re using powershell, but overall the effect is the same. Realy the only thing that needs to be edited is the makefile itself, to fit your project structure and any other libs you may want to include.
@ echo off |
REM this is a *much* abridged version of the makefile thing. |
REM fortunately, there is the %VS140COMNTOOLS% env variable, |
REM which makes it so i don’t have to copy/paste that file here, |
REM and i can change the version of visual studio tools based on |
REM just that one var. |
REM have fun. |
@ call » %VS140COMNTOOLS% \..\..\VC\vcvarsall.bat » x86_amd64 |
nmake %* |
# define macros |
EXE = executable.exe |
SRC = src |
BIN = bin |
INT = obj |
INCL = include |
OCV_INC = » $( OPENCV_DIR ) \..\..\include» |
OCV_LIB = » $( OPENCV_DIR ) \lib\opencv_world310.lib» |
ZMQ_LIB = » $( ZEROMQ_HOME ) \lib\libzmq-v120-mt-4_0_4.lib» |
ZMQ_INC = » $( ZEROMQ_HOME ) \include» |
# add other things here. |
CFLAGS = /nologo /c /openmp /EHsc |
all : clean create_dirs make_exe |
make_exe : $( EXE ) |
# compile each .cpp file to its respective .obj file |
< $( SRC ) >.cpp< $( INT ) >.obj :: |
@echo Compiling. |
cl $(CFLAGS) /Fo$(INT)\ /I$(INCL) /I$(OCV_INC) /I$(ZMQ_INC) $ # link the files into an executable |
$( EXE ) : $( INT ) \ * .obj |
@echo Linking $( EXE ) . |
link /out: $( BIN ) \$ (EXE) $( INT ) \* .obj $( OCV_LIB ) $( ZMQ_LIB ) |
# create output directories |
create_dirs : |
@if not exist $( BIN ) mkdir $( BIN ) |
@if not exist $( INT ) mkdir $( INT ) |
# delete output directories |
clean : |
@if exist $( BIN ) rmdir /S /Q $( BIN ) |
@if exist $( INT ) rmdir /S /Q $( INT ) |
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.