Visual Studio можно использовать для изменения, компиляции и сборки любой базы кода C++ с полной поддержкой IntelliSense без преобразования этого кода в проект Visual Studio или компиляции с помощью набора инструментов MSVC. Например, можно изменить кроссплатформенный проект CMake в Visual Studio на компьютере Windows, а затем скомпилировать его для Linux с помощью g++ на удаленном компьютере Linux.
Компиляция C++
Сборка программы C++ — это компиляция исходного кода из одного или нескольких файлов и последующее связывание этих файлов в исполняемый файл (EXE), библиотеку динамической загрузки (DLL) или статическую библиотеку (LIB).
Процесс базовой компиляции C++ состоит из трех основных этапов.
- Препроцессор C++ преобразует все определения #директив и макросов в каждом исходном файле. При этом создается единица трансляции.
- Компилятор C++ компилирует каждую единицу трансляции в объектные файлы (OBJ), применяя заданные параметры компилятора.
- Компоновщик объединяет объектные файлы в один исполняемый файл, применяя заданные параметры компоновщика.
Набор инструментов MSVC
В набор инструментов компилятора MSVC (также называемого цепочкой инструментов или средствами сборки) входят компилятор, компоновщик, стандартные библиотеки и связанные служебные программы Microsoft C++. Они включены в состав в Visual Studio. Вы также можете скачать и использовать набор инструментов командной строки в качестве бесплатного автономного пакета. Дополнительные сведения см. в статье Средства сборки для Visual Studio на странице Загрузки Visual Studio.
Уроки Java для начинающих #3 | Компиляция программы
Вы можете создавать простые программы, вызывая компилятор MSVC (cl.exe) непосредственно из командной строки. Следующая команда принимает один файл исходного кода и вызывает cl.exe для создания исполняемого файла с именем hello.exe:
cl /EHsc hello.cpp
Здесь компилятор (cl.exe) автоматически вызывает препроцессор и компоновщик C++ для создания окончательного выходного файла. Дополнительные сведения см. в статье Сборка из командной строки.
Системы сборки и проекты
Большинство реальных программ используют некую систему сборки для управления сложностями компиляции нескольких исходных файлов для нескольких конфигураций (для отладки и выпуска), нескольких платформ (x86, x64, ARM и т. д.), настраиваемых шагов сборки и даже нескольких исполняемых файлов, которые должны быть скомпилированы в определенном порядке. Вы выполняете настройки в файле конфигурации сборки, а система сборки принимает этот файл в качестве входных данных перед вызовом компилятора. Набор файлов исходного кода и файлов конфигурации сборки, необходимых для создания исполняемого файла, называется проектом.
Далее приведены различные варианты для проектов Visual Studio — C++.
- Создайте проект Visual Studio с помощью интегрированной среды разработки Visual Studio и настройте его, используя страницы свойств. Проекты Visual Studio создают программы, работающие в Windows. Общие сведения см. в статье Компиляция и сборка в документации по Visual Studio.
- Откройте папку, содержащую файл CMakeLists.txt. Поддержка CMake интегрирована в Visual Studio. Интегрированную среду разработки можно использовать для редактирования, тестирования и отладки без изменения файлов CMake. При этом вы можете работать в том же проекте CMake, что и другие пользователи, которые могут использовать другие редакторы. Поэтому CMake является рекомендуемым вариантом для кроссплатформенной разработки. Дополнительные сведения см. в статье Проекты CMake.
- Откройте свободную папку исходных файлов, где нет файла проекта. Для создания файлов в Visual Studio будет использоваться эвристика. Это простой способ компиляции и запуска небольших консольных приложений. Дополнительные сведения см. в статье Проекты «Открыть папку» для C++.
- Откройте папку, содержащую файл makefile или любой другой файл конфигурации системы сборки. Вы можете настроить Visual Studio для вызова любых произвольных команд сборки, добавив файлы JSON в папку. Дополнительные сведения см. в статье Проекты «Открыть папку» для C++.
- Откройте файл makefile Windows в Visual Studio. Дополнительные сведения см. в разделе Справочник по программе NMAKE.
Использование MSBuild из командной строки
Вы можете вызвать систему MSBuild из командной строки, передав ей VCXPROJ-файл вместе с параметрами командной строки. Для реализации этого подхода требуется хорошее понимание MSBuild, а использовать его рекомендуется только в случае необходимости. Дополнительные сведения см. в разделе MSBuild.
C++ с нуля | 08 | Компиляция и линковка
В этом разделе
Проекты Visual Studio
Создание, настройка и сборка проектов C++ в Visual Studio с помощью собственной системы сборки (MSBuild).
Проекты CMake
Создание, сборка и развертывание проектов CMake в Visual Studio.
Проекты в виде папок
Создание, сборка и развертывание проектов C++ в Visual Studio с помощью любой произвольной системы сборки или без нее.
Сборки выпуска
Создание и устранение неполадок оптимизированных сборок выпуска для развертывания в системах конечных пользователей.
Использование набора средств MSVC из командной строки
Описание использования компилятора C/C++ и средств сборки непосредственно из командной строки, а не с помощью интегрированной среды разработки Visual Studio.
Создание библиотек DLL в Visual Studio
Создание, отладка и развертывание библиотек DLL (общих библиотек) C/C++ в Visual Studio.
Создание изолированных приложений и параллельных сборок C/C++
Описывает модель развертывания для классических приложений Windows, основанную на концепции изолированных приложений и параллельных сборок.
Настройка проектов C++ для 64-разрядных целевых объектов с архитектурой x64
Нацеливание на 64-разрядное оборудование с архитектурой x64 с использованием средств сборки MSVC.
Настройка проектов C++ для процессоров ARM
Нацеливание на оборудование ARM с использованием средств сборки MSVC.
Оптимизация кода
Оптимизация кода различными способами, включая программную оптимизацию.
Настройка программ для Windows XP
Нацеливание на Windows XP с использованием средств сборки MSVC.
Справочные сведения о сборке C/C++
Содержит ссылки на справочные статьи о сборке программ на C++, о параметрах компилятора и компоновщика, а также о различных средствах сборки.
Источник: learn.microsoft.com
Процесс компиляции программ на C++
В данной статье я хочу рассказать о том, как происходит компиляция программ, написанных на языке C++, и описать каждый этап компиляции. Я не преследую цель рассказать обо всем подробно в деталях, а только дать общее видение. Также данная статья — это необходимое введение перед следующей статьей про статические и динамические библиотеки, так как процесс компиляции крайне важен для понимания перед дальнейшим повествованием о библиотеках.
Все действия будут производиться на Ubuntu версии 16.04.
Используя компилятор g++ версии:
$ g++ —version g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Состав компилятора g++
Компилятор
Компиля́тор — программа или техническое средство, выполняющее компиляцию.
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Входной информацией для компилятора (исходный код) является описание алгоритма или программа напроблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).
Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.
Виды компиляторов
- Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.
- Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
- Диалоговый. См.: диалоговый транслятор.
- Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
- Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
- Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
- Отладочный. Устраняет отдельные виды синтаксических ошибок.
- Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.
- Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.
- Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический исемантический загрузчики.
- Пакетная. Компиляция нескольких исходных модулей в одном пункте задания.
- Построчная. То же, что и интерпретация.
- Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе директивами компилятора. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы.
- Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.
- Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.
- Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.
- Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом.
- Генерация кода. Из промежуточного представления порождается код на целевом языке.
Источник: studfile.net