Как использовать makefile в visual studio

Обновлено: 03.07.2024

Объект 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 makefile для Linux.

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

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

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

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

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

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

в главном меню Visual Studio выберите файл > создать > Project и введите в поле поиска "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, выполните указанные ниже действия.

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

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

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

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

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

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

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

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

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

We are excited to announce a brand-new extension for building and debugging Makefile projects in Visual Studio Code: Makefile Tools (preview)! The extension is in pilot stages, but we’ve curated a list of over 70 popular opensource Makefile projects that work with Makefile Tools. Give it a try and let us know what you think!

Installing the extension

First, install the Makefile Tools extension from the VS Code Marketplace.

Image of Makefile Tools extension in VS Code Marketplace

Activating the extension

Once the extension is installed, it will activate when it finds a Makefile in your project’s root folder. If your project’s Makefile is not in the root folder, you can use the Makefile Path setting to instruct the extension where to find it. Update Makefile Path by going to File > Preferences > Settings and then selecting makefile under Extensions.

Image showing the Makefile Tools extension

After updating Makefile Path, type “makefile” into the Command Palette and run a Makefile Tools command to activate the extension.

Configuring your project

By default, the extension will attempt to use a make program that resides within your $PATH to configure the project. If your make.exe is not in your $PATH, update the Make Path setting by going to File > Preferences > Settings and then selecting makefile under Extensions. The Make Path setting tells the extension where to find your make executable.

Image showing the Makefile Tools extension

Once your make path is properly set, accept the prompt to allow Makefile Tools to configure IntelliSense.

Image showing pop-up notification for allowing the Makefile Tools extension to configure IntelliSense

If you regularly pass additional arguments to make, use the Makefile Tools’ Configurations setting (makefile.configurations in settings.json) to specify those arguments. Makefile.configurations is an array of configuration objects, each with a name and makeArgs property that holds the arguments to pass to make. To help you out, we’ve documented the correct configurations for over 70 popular open-source repositories. For example, to create a configuration for littlekernel, where you need to pass “PROJECT=armemu-test” to make, your settings.json would look something like this:

To choose the configuration for a project, select the Makefile Tools icon in the left explorer menu.

Hover over Configuration and select the pencil icon to choose a configuration for your project.

Image showing the "edit Configuration" button that appears on hover in the Makefile Tools UI pane

If you didn’t define any configurations in makefile.configurations, the extension will automatically select a default one.

Building targets

After configuring your project, you’re ready to build. Choose a Build target by selecting the pencil icon that appears on hover.

Image showing the "edit Build target" button that appears on hover in the Makefile Tools UI pane

Then choose from the list of targets found in your project’s Makefile.

Image showing a list of build targets found in the project

After setting the Build target, click the Build icon.

Image showing the Build button in the top right corner of the Makefile Tools UI pane

Debugging and running targets

To run/debug your program, use the pencil icon to select a Launch target. A configuration for the selected target will be added to the makefile.launchConfigurations setting. If you need to pass additional arguments to your targets, add the binaryArgs property to the target’s configuration in makefile.launchConfigurations. You can also set MIMode, miDebuggerPath, and stopAtEntry in makefile.launchConfigurations.

Image showing the "edit Launch target" button that appears on hover in the Makefile Tools UI pane

Once the Launch target is set, select the Debug icon to start a debugging session.

Image showing the Debug target button in the top right corner of the Makefile Tools UI pane

To run the program without debugging, select the Run in Terminal button.

Image showing the Run in Terminal button in top right corner of the Makefile Tools UI pane

Makefile Tools commands

Image showing the Makefile Tools extensions commands in the Command Palette, all beginning with "makefile:"

Makefile Tools settings

  • configurations (tells the extension which arguments to pass to make when configuring your project)
  • defaultLaunchConfiguration (global debugger settings)
  • launchConfigurations (debugger settings for specific launch targets)
  • makePath (path to your make executable)
  • makefilePath (path to project’s Makefile)
  • buildLog (alternative to dry-run)

Known limitations

This is a preview release of Makefile Tools, and although we’ve tested it with over 70 repositories, you may need to do some fiddling to configure your project for the first time. Please feel free to submit a PR to this document, adding your repository and its correct configuration settings, to help anyone who might be trying to build the same project.

Check out our troubleshooting guide for a list of known limitations and work-arounds.

What do you think?

Download the Makefile Tools extension for Visual Studio Code today, give it a try, and let us know what you think. If you run into any issues, or have any suggestions, please report them in the Issues section of our GitHub repository.

Давайте начистоту, мало кто использует отладчик GDB на Linux в консольном варианте. Но что, если добавить в него красивый интерфейс? Под катом вы найдёте пошаговую инструкцию отладки кода С/С++ на Linux в Visual Studio Code.




Передаю слово автору.

Относительно недавно я переехал на Linux. Разрабатывать на Windows, конечно, удобнее и приятнее, но и здесь я нашел эффективный способ легко и быстро отлаживать код на С/С++, не прибегая к таким методам как «printf-стайл отладки» и так далее.

Итак приступим. Писать в sublime (или gedit/kate/emacs ), а запускать в терминале — так себе решение, ошибку при работе с динамическим распределением памяти вряд ли найдёшь с первого раза. А если проект трудоёмкий? У меня есть более удобное решение. Да и ещё поддержка Git в редакторе, одни плюсы.

Сегодня мы поговорим про Visual Studio Code.

Установка

Ubuntu/Debian

  1. Качаем версию пакета VS Code с расширением .deb
  2. Переходим в папку, куда скачался пакет (cd

/Загрузки или cd

Расширения для С/С++

Чтобы VS Code полностью сопровождал нас при работе с файлами С/С++, нужно установить расширение «cpptools». Также полезным будет поставить один из наборов сниппетов.


Настоятельно рекомендую включить автосохранение редактируемых файлов, это поможет нам в дальнейшем.


Идём дальше. Открываем любую папку (новую или нет, неважно).


У меня в этой папке уже есть пара файлов для работы с C/C++. Вы можете скопировать одну из своих наработок сюда или создать новый файл.


Осталось всего ничего. Настроить компиляцию в одну клавишу и научиться отлаживать без printf .

Шаг 1. Открываем файл .c/.cpp, который (обязательно) лежит в вашей папке.

Шаг 2. Нажимаем Ctrl+Shift+B. VS Code вам мягко намекнет, что он не знает как собирать ваш проект.



Шаг 3. Поэтому дальше настраиваем задачу сборки: выбираем «Настроить задачу сборки» -> «Others».

Шаг 4. Прописываем конфигурацию в соответствии с образцом. По сути мы пишем скрипт для консоли, так что всем кто имел дело с ней будет понятно дальнейшее. Прошу заметить, что для сборки исходников в системе должен стоять сам компилятор (gcc или другой, отличаться будет только значение поля command ). Поэтому для компиляции .cpp, понадобится в поле command указать g++ или c++ , а для .c gcc .

Шаг 5. В args прописываем аргументы, которые будут переданы на вход вашему компилятору. Напоминаю, что порядок должен быть примерно таким: -g, <имя файла> .

Внимание: Если в вашей программе используется несколько файлов с исходным кодом, то укажите их в разных аргументах через запятую. Также обязательным является ключ -g (а лучше даже -g3 ). Иначе вы не сможете отладить программу.

Если в проекте для сборки вы используете makefile , то в поле command введите make , а в качестве аргумента передайте директиву для сборки.



Шаг 6. Далее возвращаемся обратно к нашему исходнику. И нажимаем F5 и выбираем C++.


Шаг 7. Осталось только написать путь к файлу программы. По умолчанию это $/a.out , но я в своем файле сборки указал флаг -o и переименовал файл скомпилированной программы, поэтому у меня путь до программы: $/main .



Шаг 8. Всё, больше нам не нужно ничего для начала использования всех благ VS Code. Переходим к основному проекту.

Отладка

Для начала скомпилируем программу (нет, нет, убери терминал, теперь это делается по нажатию Ctrl+Shift+B).


Как вы видите в проводнике появился main , значит все в порядке и сборка прошла без ошибок. У меня не слишком большая программа, но выполняется она моментально. Одним словом, провал чистой воды, потому что отладка идет в отдельном терминале, который закрывается после того, как программа дошла в main() до "return 0;" .



Пришло время для брейкпоинтов. Выберем строчку с "return 0;" и нажимаем F9.



Строчка, помеченная красной точкой слева — место, где остановится программа, при выполнении.

Далее нажимаем F5.


Как я и сказал, программа остановила выполнение. Обратите внимание на окно с локальными переменными.


Удобненько. Также при остановке можно наводить мышкой на переменные и структуры в коде и смотреть их значения.



Также, если на каком-то этапе выполнения вам нужно посмотреть пошаговое выполнение той или иной операции, например в цикле, то поставьте брейкпоинт перед ней и нажмите F10 для выполнения текущей строчки без захода в подпрограмму и F11 с заходом.

Также есть случаи, когда считать выражение очень муторно вручную, но для отладки вам нужно знать, например, значение суммы трех элементов массива, или значение большого логического выражения. Для этого существуют контрольные значения. Все это и многое другое могут показать вам Контрольные значения (или «watch»).


  1. Для каждой папки вам нужно отдельно настроить файлы сборки и путь к программе.
  2. VS Code не решит ваших проблем, но поможет быстрее с ними разобраться. Причем в разы.
  3. После каждого изменения программы, ее нужно компилировать заново, нажимая Ctrl+Shift+B.

Об авторе

Этот пост поможет начинающим сэкономить несколько часов(дней) для настройки среды Visual Studio для разработки под Arduino на языке С/C++.

image

Преамбула

Пару месяцев назад увидел у преподавателя некую платку, подключенную к компьютеру. На платке были видны семисегментные индикаторы и несколько светодиодов. Преподаватель разбирался в каком-то коде, платка тем временем живо сигнализировала ему что-то. Меня сразу заинтересовало, чем это он там занимается… Однако, всё, что я смогу узнать у него — это то, что платку зовут отладочной. Путём недолгого гугления выхожу на игрушку под названием «Arduino». Заказываю себе Arduino mega, та что с Atmega1280 (всего $29.99) и через две недели бегу на почту получать заветную игрушку.

Фабула

Т.к. я являюсь заядлым Windows-разработчиком, привыкшим к среде VS, то я решил сразу отвлечься от родной среды Arduino IDE.

  • Собственно, сама среда;
  • Visual Assist X — опционально, для облегчения разработки. Заменяет собой встроенный IntelliSense встроенный в VS. Еще куча дополнительных опций. Платное;
  • WinAVR последней версии. Это компилятор программ на С/С++ для «платформы» AVR;
  • avr-libc. Минимальная реализация стандартной библиотеки С для AVR. Содержит такие полезные функции, как, например, _delay_ms или _delay_us (задержка в милли- и микросекундах);
  • Avrdude. Желательно свежей версии, универсальный программатор для AVR;
  • FTDI Virtual Com Port Drivers. Не вдаваясь в подробности, будем называть это «драйверами для Arduino»;
  • AvrStudio — опционально. Имеет встроенный симулятор микроконтроллера, позволяющий пошагово отлаживать программу;
  • Arduino schematic. Этот pdf-файл понадобится для того, чтобы узнать к каким портам МК подключены выходы Arduino.

Всё гуглится на раз.

Итак, приступим. Устанавливаем WinAVR, avr-libc, скачивам Avrdude. Подключаем Arduino к компьтеру и устанавливаем драйвера. Создаём «makefile project» в Visual Studio. Заполняем поля так, как на рисунке ниже.

image

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

MCU = atmega1280
F_CPU = 16000000
FORMAT = ihex
TARGET = ATMEGA-1280-DEV-BOARD
SRC = $(TARGET).C

  • Первая строчка обозначает тип микроконтроллера. Для Arduino mega это atmega1280;
  • Вторая строчка задаёт частоту, на которой будет работать наш МК;
  • Третья строка — формат выходного файла. Лучше оставить intel hex;
  • Четвёртая — имя вашего проекта;
  • Пятая — список исходных файлов проекта.
  • Опция -p указывает тип девайса, который будем шить;
  • -с указывает тип программатора. Arduino использует протокол обмена информацией позаимствованный у программатора STK500, поэтому здесь можно смело вписывать stk500. Однако, в новой версии avrdude добавили в качестве программатора Arduino, поэтому с пущей уверенностью вписываем сюда arduino;
  • Следующая опция указывает на какой скорости будет происходить передача данных. Здесь всегда нужно ставить 57600;
  • Опция -P указывает порт, к которому подключен программатор;
  • Последняя опция указывает какую конкретно операцию следует выполнить. Для нас это загрузка в флеш-память микроконтроллера программы.

Изменяем секцию all примерно так:
all: build program
Добавляем к списку задачи «program». Это позволит при удачной компиляции автоматически грузить прошивку в МК.

В принципе, всё готово. Пробуем написать минимальную программу (моргалку светодиодом L). Смотрим в файлик arduino-mega-schematic.pdf и видим, что 13 порт Arduino есть ни что иное, как PB7. Пишем примерно следующую программу:

int main()
DDRB = 0xFF;
while ( true )
PORTB |= (1 << 7);
_delay_ms(500);
PORTB &=

* This source code was highlighted with Source Code Highlighter .

Минимальный интерфейс для работы с портами ввода-вывода:

class Port
public :
Port(PORT& p) : _p(p) <>;
Port& operator ! ();
Port& operator += (uint8 b);
Port& operator -= (uint8 b);
Port& operator = (Port& p);
void SetLow();
void SetHigh();
PORT& GetValue();
bool ClearBit(uint8 b);
bool SetBit(uint8 b);
void Pulse(uint8 t);
void PulseBit(uint8 b, uint8 t);
private :
PORT& _p;
>;

* This source code was highlighted with Source Code Highlighter .

image

Сохраняем makefile, собираем проект, любуемся результатом.

П.С. К 10-му числу приедет набор состоящий из всевозможных сенсоров и датчиков. К февралю соберу ультразвуковой дальномер и фоторегистратор.

Читайте также: