Как создать makefile в windows

Создание проекта makefile на C++

Объект makefile представляет собой текстовый файл с инструкциями по компиляции и компоновке (или сборке) некоторого набора файлов исходного кода C++. Программа make считывает файл makefile и вызывает компилятор, компоновщик и другие программы для создания исполняемого файла. Реализация make, созданная корпорацией Майкрософт, носит имя NMAKE.

Если у вас есть существующий проект Makefile, который вы хотите развивать и (или) отлаживать в интегрированной среде разработки Visual Studio, у вас есть следующие варианты.

  • Создайте в Visual Studio проект makefile, который использует существующий файл makefile для настройки файла VCXPROJ, используемого средой Visual Studio для IntelliSense. (У вас не будет всех функций интегрированной среды разработки, которые вы получаете с помощью собственного проекта MSBuild.) См. раздел Создание проекта Makefile ниже.
  • Используйте мастер создания нового проекта из существующих файлов кода, чтобы создать собственный проект MSBuild из исходного кода. Исходный файл makefile после этого использоваться не будет. Дополнительные сведения см. в разделе Практическое руководство. Создание проекта C++ из существующего кода.
  • Visual Studio 2017 и более поздние версии: используйте функцию " Открыть папку " для изменения и сборки проекта Makefile без участия в системе MSBuild. Дополнительные сведения см. в статье Проекты "Открыть папку" для C++.
  • Visual Studio 2019 и более поздние версии: Создание проекта UNIX для Linux.

Создание проекта makefile с использованием шаблона проекта makefile

В Visual Studio 2017 и более поздних версиях шаблон проекта Makefile доступен, если установлена рабочая нагрузка разработки классических приложений на C++.

Используйте мастер, чтобы указать команды и среду, используемые файлом makefile. Затем этот проект можно использовать для сборки кода в Visual Studio.

По умолчанию проект makefile не отображает в обозревателе решений никаких файлов. Проект makefile задает параметры сборки, которые показаны на странице свойств проекта.

Выходной файл, который задается в проекте, не влияет на имя, которое формирует скрипт построения; он указывает только на намерения. Файл makefile по-прежнему управляет процессом сборки и указывает ее целевые объекты.

Создание проекта makefile в Visual Studio 2019

В главном меню Visual Studio выберите файл > создать > проект и введите Makefile в поле поиска. Или же откройте диалоговое окно Новый проект, разверните узел Visual C++ > Общие (Visual Studio 2015) или Прочие (Visual Studio 2017) и выберите один из двух вариантов в зависимости от того, предназначен ли проект для Windows или Linux.

Только для Windows: на странице Параметры конфигурации отладки укажите сведения о команде, выходе, очистке и перестроении для сборок отладки и розничной торговли. Чтобы указать другие параметры для конфигурации выпуска, нажмите кнопку Далее.

Нажмите кнопку Готово, чтобы закрыть диалоговое окно и открыть созданный проект в обозревателе решений.

Создание проекта makefile в Visual Studio 2015 или Visual Studio 2017

На начальной странице Visual Studio введите строку "makefile" в поле поиска Новый проект. Или же откройте диалоговое окно Новый проект, разверните узел Visual C++ > Общие (Visual Studio 2015) или Прочие (Visual Studio 2017) и в области шаблонов выберите Проект Makefile, чтобы открыть мастер проектов.

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

Нажмите кнопку Готово, чтобы закрыть мастер и открыть вновь созданный проект в обозревателе решений.

На этой странице свойств можно просматривать и изменять свойства проекта. Сведения об отображении страницы свойств см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.

Мастер проекта makefile

Создав проект makefile, вы можете просматривать и изменять каждый из следующих параметров на странице Nmake свойств проекта.

Командная строка сборки: Задает командную строку, которая будет запускаться при выборе пользователем сборки в меню "сборка". Отображается в поле "Командная строка для сборки" на странице "Nmake" свойств проекта.

Выходные данные: Указывает имя файла, который будет содержать выходные данные для командной строки. По умолчанию этот параметр основан на имени проекта. Отображается в поле "Вывод" на странице "Nmake" свойств проекта.

Команды очистки: Задает командную строку, выполняемую при выборе пользователем команды Очистить в меню Сборка. Отображается в поле "Командная строка для очистки" на странице "Nmake" свойств проекта.

Командная строка перестроения: Задает командную строку для запуска, когда пользователь выбирает перестроение в меню "сборка". Отображается в поле "Командная строка для перестроения всех файлов" на странице "Nmake" свойств проекта.

Практическое руководство. Использование IntelliSense для проекта Makefile

IntelliSense не работает в проектах makefile, если определенные параметры проекта или компилятора заданы неправильно. Чтобы настроить проекты makefile для правильной работы IntelliSense, выполните указанные ниже действия.

Откройте диалоговое окно Страницы свойств. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

Откройте страницу свойств Свойства > NMAKE .

Измените свойства в разделе IntelliSense соответствующим образом:

Задайте свойство Определения препроцессора, чтобы определить символы препроцессора в проекте makefile. Дополнительные сведения см. в разделе /D (определения препроцессора).

Задайте свойство Путь поиска включаемых файлов, чтобы указать список каталогов, где компилятор будет производить поиск для разрешения ссылок на файлы, передаваемых в директивы препроцессора в новом проекте makefile. Дополнительные сведения см. в разделе /I (дополнительные каталоги включения).

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

Задайте свойство Принудительно включаемые файлы, чтобы указать файлы заголовков, обрабатываемые при сборке проекта makefile. Дополнительные сведения см. в разделе /FI (имя принудительно включаемого файла).

Задайте свойство Путь поиска сборок, чтобы указать список каталогов, где компилятор будет производить поиск для разрешения ссылок на сборки .NET в проекте. Дополнительные сведения см. в разделе /AI (указание каталогов метаданных).

Задайте свойство Обязательно используемые сборки, чтобы указать, какие сборки .NET обрабатываются при сборке проекта makefile. Дополнительные сведения см. в разделе /FU (именование файла с принудительно используемым атрибутом #using).

Задайте свойство Дополнительные параметры, чтобы указать дополнительные параметры компилятора, которые должны использоваться IntelliSense при анализе файлов C++.

Нажмите кнопку ОК, чтобы закрыть окно страниц свойств.

Используйте команду Сохранить все, чтобы сохранить измененные параметры проекта.

При следующем открытии проекта makefile в среде разработки Visual Studio запустите команду Очистить решение, а затем — команду Собрать решение для проекта makefile. Технология IntelliSense должна работать в интегрированной среде разработки правильно.

Как запустить makefile в Windows?

У меня есть несколько демо, которые я загрузил, и они поставляются с Makefile.win и Makefile.компания SGI. Как я могу запустить их в Windows для компиляции демонстраций?

8 ответов

Если у вас есть Visual Studio, Запустите командную строку Visual Studio из меню Пуск, перейдите в каталог, содержащий Makefile.win и типа этого:

вы также можете использовать обычную командную строку и запустите файл vsvars32.летучая мышь c:\Program файлы (x86)\Microsoft Visual Studio 9.0\Common7\Tools для VS2008). Это настроит среду для запуска nmake и поиска инструментов компилятора.

проверить cygwin, среда Unix для Windows

проверить GnuWin ‘ s сделать, который предоставляет собственный порт для Windows (без необходимости полной среды выполнения, такой как Cygwin)

вот мой быстрый и временный способ запустить Makefile

  • скачать сделать С SourceForge: gnuwin32
  • установки
  • перейдите в папку установки
  • скопировать все файлы в мусорное ведро к папка, содержащая Makefile

libiconv2.файл DLL libintl3.dll make.exe

  • откройте cmd(вы можете сделать это с помощью щелкните правой кнопкой мыши с shift) в папке, содержащей Makefile и run

кроме того, вы можете добавить аргументы после команды, такие как

С Visual Studio 2017 мне пришлось добавить эту папку в мою переменную env пути Windows 10:

есть также HostX86

Если это" nmake Makefile", то есть синтаксис совместим с NMake, он будет работать.

часто предоставляются стандартные файлы Makefile Linux и NMake выглядит многообещающе. Однако следующая ссылка берет простой файл Makefile Linux и объясняет некоторые фундаментальные проблемы, с которыми можно столкнуться.

во-первых, добавьте путь к Visual studio common tools ( c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools ) в системный путь. Чтобы узнать, как добавить путь в системный путь, проверьте этот веб-сайт: http://www.computerhope.com/issues/ch000549.htm. Тебе просто нужно это один раз.

после этого, когда вам нужно, откройте командную строку и выполните vsvars32.bat чтобы добавить все необходимые пути visual studio tools в системный путь.

тогда вы можете позвонить nmake -f makefile.mak

PS: путь визуального studio common tools может отличаться в вашей системе. Пожалуйста, измените его соответствующим образом.

Что такое 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: полезный универсальный инструмент программиста — видео-версия данного гайда.

Мейкфайлы, использованные при составлении гайда:

Добавить комментарий

Ваш адрес email не будет опубликован.