Как перекомпилировать в visual studio
В наше время open source проекты все популярнее. На площадках открытых проектов, например, на github можно найти множество полезных программ, но они не всегда имеют исполняемые файлы («exe»), поэтому я постараюсь рассказать о том, как можно собрать самостоятельно C/C++ программу, из исходников, написанную на Microsoft Visual Studio.
Первым делом нам необходимо загрузить онлайн установщик Microsoft Visual Studio, с официального сайта. Для компиляции С/С++ проектов нет необходимости во всех пакетах и можно выбрать только те, которые нам необходимы.
Установщик загрузит необходимые пакеты из интернета и установит их.
После установки Visual Studio можно убедиться, что всё работает создав тестовый проект и скомпилировав его. Для этого нажмите в меню «Файл» → «Создать» → «Проект. «
После чего появится диалог выбора типа проекта, где можно выбрать:
- Консольное приложение;
- Классическое приложение;
- Библиотеку динамической компоновки (dll);
- Статическую библиотеку;
В нашем случае для быстрой проверки подойдет консольное приложение, выбираем название и папку проекта , после чего жмём кнопку «ОК» и создается наша программа.
После этого остается остается лишь скомпилировать её, для этого нужно выбрать в меню «Сборка» и нажать на пункт «Собрать решение».
Далее наш проект скомпилируется и в папке проекта появится наш тестовый исполняемый файл («exe»).
Если всё работает как надо, то можно приступать к сборке какого-нибудь другого открытого проекта с github или другого хостинга проектов.
Первым делом нам нужно загрузить исходники проекта. На площадке github это делается довольно просто, жмем на кнопку «Code» и «Download ZIP». После чего нужно распаковать его и можно приступать к сборке.
Ищем файл с расширением «.vcxproj» и запускаем его. Перед нами появится диалог в котором нам предложат обновить SDK проекта (набор библиотек для разработки, которые Microsoft периодически обновляет) и набор инструментов, жмём обновить.
Теперь наш проект можно собрать, но до сборки необходимо выбрать разрядность проекта (например, для 32 битной системы или 64 битной), а также тип сборки (отладочный режим — debug или release).
Выбираем 64 битную систему и тип сборки релиз, после чего компилируем проект. Как и ранее нужно выбрать в меню «Сборка» и нажать на пункт «Собрать решение».
Некоторые проектам требуется вручную изменить SDK и набор инструментов, на установленный у вас, для этого идём в свойства проекта, выбираем сверху типа сборки и разрядность системы и уже там изменяем SDK и набор инструментов. В выпадающем меню появляются установленные у нас версии, выбираем их и нажимаем «ОК». После чего наш проект скомпилируется.
Бывает, что проект использует сторонние библиотеки, для этого их нужно загрузить отдельно и положить в папку. Узнать путь или изменить его можно в свойстве проекта, в разделе «С/C++» → «Общие» → «Дополнительные каталоги включаемых файлов».
Бывает, что SDK или набор инструментов, в свойстве проекта не изменяется в диалоге, чтобы изменить их нужно записать номер SDK, закрыть Visual Studio и вручную, блокнотом изменить этот номер в файле проекта «.vcxproj».
При возникновении других проблем можно попробовать их загуглить, возможно, что кто-то уже сталкивался с ними и решил их.
У меня есть проект, который использует Effects11.lib и Effects11d.lib, но когда я создаю свой проект, я получаю кучу «ошибки LNK2038: обнаружено несоответствие для» __MSC_VER «: значение» 1600 «не соответствует значению» 1800 «. И из того, что я нашел, это говорит о том, что.lib был создан для другой версии VS, чем то, что я использую, и мне нужно перекомпилировать их. Проблема в том, что я не уверен, как это сделать. Никогда не приходилось перекомпилировать lib раньше.
спросил(а) 2015-01-12T07:18:00+03:00 6 лет, 10 месяцев назад
который затем ссылается на
который имеет загрузку для источника этой библиотеки в
который, как представляется, имеет файлы проектов, которые можно использовать с VS2013, которые вы используете, чтобы вы могли создавать эффекты.lib для vs2013 и продолжать свою разработку.
Альтернативу вы могли бы связаться с самим автором с его веб-страницы и посмотреть, сможет ли он сделать это для вас и связать с ним, поскольку, скорее всего, вы не единственный, кто попал в эту проблему?
ответил(а) 2015-01-12T16:16:00+03:00 6 лет, 10 месяцев назад
Эти статические библиотеки построены с помощью VS 2010, но вы используете VS 2013. Ошибка ссылки сообщает об этом.
Исправление в этом случае — это посетить сайт Effects 11 на CodePlex, а затем создать новую копию Effects 11 с вашим компилятором VS 2013. Кроме того, вы можете использовать пакет NuGet fx11_desktop_2013, который является той же версией, созданной для VS 2013.
Обратите внимание, что при использовании VS 2013, который включает в себя SDK Windows 8.1 с несколько устаревшей книгой Luna, вы можете попытаться использовать устаревшую библиотеку D3DX11. Вы, безусловно, можете сделать это с VS 2013 года, но вам нужно внести некоторые изменения в проект include/lib paths, чтобы заставить его работать. См. MSDN. Библиотека библиотеки Effects 11 от CodePlex или NuGet не имеет никаких зависимостей от устаревшего SDK DirectX.
У меня есть некоторые общие замечания об этой книге здесь также.
Полный список альтернатив D3DX11 см. В разделе » Жизнь без D3DX».
ответил(а) 2015-01-12T23:58:00+03:00 6 лет, 10 месяцев назад
Чтобы перекомпилировать файл.lib, сначала нужно иметь исходный код. Затем вы открываете проект vcproject проекта библиотеки, а затем вы меняете свои настройки, а затем можете перекомпилировать. Я также нашел в Интернете, что для некоторых типов c++ для его перекомпиляции вам придется удалить файл.o, сгенерированный в каталоге библиотеки. Но я не знаю, относится ли это к вашему компилятору. Надеюсь, это ответит на ваш вопрос.
Компиляция программ C / C ++ в Visual Studio Code [1] -MinGW-W64
Каталог статей
Visual Studio Code (далее VS Code) — один из самых популярных редакторов кода на данный момент. Он имеет открытый исходный код, кроссплатформенный, поддерживает несколько языков, богатые расширения и удобный пользовательский интерфейс. В то же время он учитывает функции некоторых IDE, таких как IntelliSense, компиляция, Отладка и т. Д. Сделали его популярным среди программистов. Но поскольку это, по сути, просто текстовый редактор, когда он был впервые установлен, в нем не было ничего, кроме основных функций редактирования, что заставляло некоторых пользователей, только начинающих работать, путаться. Поэтому, основываясь на моем собственном опыте, я кратко расскажу об установке VS Code и MinGW-W64, а также о том, как использовать MinGW-W64 для компиляции программ C / C ++ во вновь установленном VS Code.
1. Установите VS Code
Сначала мы начнем сОфициальный сайт VS CodeСкачайте последнюю версию, откройте установщик и согласитесь с соглашением.
Для других задач подбирайте их по мере необходимости. Рекомендуется проверить их все. Так будет намного удобнее для дальнейшей работы
Подтвердите правильность и начните установку.
Запустите VS Code, чтобы проверить, может ли он работать нормально
2. Установите расширение C / C ++ для VS Code.
3. Установите MinGW-W64.
4. Добавьте MinGW-W64 в путь
Теперь нам нужно поместить двоичный файл в каталог MinGW-W64. C:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin (Измените этот путь на свой собственный) Добавьте в системную переменную окружения Путь, метод работы следующий
Откройте панель управления и выберитеСистема и безопасность> Система , А затем щелкните порядок, как показано ниже, чтобы добавить переменные среды
Или обратитесь к другому моему руководству:Как добавить Python в системную переменную окружения Path в Win10, Метод аналогичен
5. Создайте новый проект.
Сначала создадим новый проект. Создайте новую папку в своем любимом каталоге, я создам здесь новую hello_world папка. Войдите в папку, щелкните правой кнопкой мыши пустое пространство и выберите «Открыть с помощью кода». (Вы также можете открыть папку в программе VS Code)
После открытия нажмите кнопку ниже, чтобы создать новый файл с именем hello_world.cpp
Примечание. Необходимо вручную ввести расширение файла. .cpp , Чтобы правильно определить тип файла и включить IntelliSense
Затем вводим следующие
Ctrl + S сохранить
6. Создайте и отредактируйте файл конфигурации в VS Code.
Затем нам нужно сгенерировать файлы конфигурации, необходимые для компиляции (Compile) и отладки (Debug). Сначала мы генерируем файл конфигурации, используемый для компиляции tasks.json
task.json
Нажмите Ctrl+Shift+P Сочетание клавиш, во всплывающем окне найдите Задачи, выберите Настроить задачу сборки по умолчанию.
и выберите g++ Это третий на картинке ниже
Теперь у нас есть файл конфигурации по умолчанию. tasks.json следующим образом
Примечание: мы можем получить больше информации об этом файле по ссылке в комментарии
Теперь вернемся к hello_world.cpp , Вы можете использовать его напрямую Ctrl+Shift+B Ярлык для компиляции файла
Вы можете видеть, что скомпилированный hello_world.exe файл. Нажмите Ctrl + Сочетание клавиш, чтобы открыть Терминал с VS Code, введите . \ hello_world.exe`, вы можете запустить напрямую
launch.json
Когда мы включаем GDB для отладки, нам понадобится еще один launch.json
выберите в верхней строке менюDebug > Add Configuration…
и выберите C++ (GDB/LLDB)
, затем выберите g++ Вон тот
VS Code автоматически запустит отладку и сгенерирует launch.json Файл, как показано ниже
Теперь отладка по умолчанию запускается в терминале ниже. Если нам нужно отдельное окно командной строки, мы можем добавить «externalConsole»: false средний false Чтобы true , А затем отлаживайте эффект следующим образом
Примечание. Подробнее об этом файле можно узнать по ссылке в комментарии к файлу launch.json.
c_cpp_properties.json
Если мы хотим дополнительно настроить соответствующую конфигурацию расширения C / C ++, мы можем создать c_cpp_properties.json , Есть два способа использования UI и json
Ctrl+Shift+P , Найдите c / c ++, выберите любое из следующих изображений (пользовательский интерфейс — графическая операция, JSON — метод редактирования текста)
Ниже приводится обзор параметров (без усечения).
Здесь нет необходимости в дополнительных операциях, просто установите его на мое изображение выше.
О папке .vscode
Мы видим еще один в папке .vscode В папке находится только что сгенерированный файл конфигурации. Поскольку то, что мы создали раньше, является общими файлами шаблонов, каждый раз, когда мы создаем новый проект в будущем, нам нужно только .vscode Скопируйте в соответствующую папку, отредактируйте и настройте по мере необходимости, вы можете напрямую использовать сочетания клавиш для компиляции и отладки, без необходимости повторять процесс снова
На данный момент руководство по использованию MinGW-W64 для компиляции программ C / C ++ в Visual Studio Code закончено.
Поскольку мне всё равно пришлось ставить Visual Studio Community для того, чтобы установить Windows Kits для работы с WinAPI, то я решил не использовать MingW, а доустановить C++ build tools и использовать их для компиляции. В этом случае придётся переделать задачи (tasks) и настройки VSCode.
Хорошее описание нашёл здесь, его и буду использовать в данной заметке.
Нам потребуется

1. Естественно нам потребуется сама программа VSCode.
2. В Visual Studio Community должен быть установлен компонент Desktop development with C++ :
Чтобы проверить успешную установку, достаточно вызвать Developer Command Prompt for VS 2019 (файл VsDevCmd.bat ) из Пуска. Там нужно запустить файл cl.exe . Вывод консоли должен быть без ошибок:
3. Для VSCode должно быть установлено дополнение (расширение) Microsoft C/C++
Настройка
4. В Проводнике открываем рабочую папку проекта и, удерживая Shift , нажимаем правую кнопку мыши, после чего выбираем Open PowerShell window here
5. В открывшемся окошке PowerShell запускаем VSCode, для этого нужно набрать code . и нажать Enter :
Шаги 9-11 скорее всего не нужны. В статье они есть, но без них у меня всё тоже прекрасно компилируется.

9. Открываем палитру команд с помощью комбинации клавиш Ctrl + Shift + P
10. Список большой, поэтому проще ввести часть слова и выбрать нужную команду Edit Configurations UI из списка:
11. В конфигурации необходимо проверить, а, при необходимости, установить путь для компилятора:

12. Внесём изменения в файл settings.json :
У меня глобальный файл настроек, а не только для проекта, поэтому я добавляю строчки в начало файла C:\Users\Denis\AppData\Roaming\Code\User\settings.json
13. Ранее я уже создавал файл Задач tasks.json, поэтому сейчас я добавлю к нему новые строчки:
14. Чтобы у нас была возможность запустить проект на отладку, можно использовать файл launch.json . Но я не хочу создавать такой файл для каждого проекта каждый раз, поэтому сделаю глобальную конфигурацию. Для этого я добавлю строчки в файл settings.json :
Благодаря этому, при нажатии F5 , проект будет откомпилирован, а потом запущен сразу после этого. Просто запустить, без отладки, можно комбинацией Ctrl + F5
Читайте также:
- Адаптер программа для компьютера
- Как связать справочники между собой в 1с
- 1с кис что это
- Asus m2n68 am se2 настройка биос
- Digma city octa 80 как прошить
Как перекомпилировать проект Microsoft Visual Studio?
Есть проект, нужно перекомпилировать под 32 разрядную систему, но в диспетчере конфигураций на выбор только х64 и х86.
Если перекомпилировать под х86, то будет ли проект запускаться на 32х разрядной Windows?
- Вопрос задан более трёх лет назад
- 1147 просмотров
Комментировать
Решения вопроса 2
Консультация и разработка мобильных приложений
Должен
x86 — 32х разрядная система
x64 — 64х разрядная система
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Разработчик .NET
x86 — историческое название для 32-битной архитектуры.
Цитата из Википедии:
Название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей — 8086, 80186, 80286 (i286), 80386 (i386), 80486 (i486). За время своего существования набор команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями.
Помимо Intel архитектура также была реализована в процессорах других производителей: AMD, VIA, Transmeta, IDT и др. В настоящее время для 32-разрядной версии архитектуры существует ещё одно название — IA-32 (Intel Architecture — 32).
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C#
Почему программа выводит нули?
- 1 подписчик
- 35 минут назад
- 18 просмотров

- C++
- +2 ещё
Что не так с кодом, проверяющим логическую схему?
- 1 подписчик
- 5 часов назад
- 52 просмотра
Как скомпилировать программу на C ++ в Visual Studio

Хотите скомпилировать программу на C ++ в Visual Studio? Давайте сделаем это.
В этом руководстве мы будем использовать Visual Studio в качестве нашей IDE (, а не код Visual Studio). Прежде чем мы начнем, вам потребуется:
- программа на C ++
- загруженная и установленная версия Visual Studio для сообщества *
* При установке Visual Studio убедитесь, что вы выбрали «Разработка настольных компьютеров с C ++» на вкладке рабочих нагрузок. Теперь, когда все готово, приступим.
Шаг 1. Компиляция нового проекта
Начните с открытия Visual Studio в Windows и выберите «Создать новый проект». После этого вы сможете выбрать шаблон. Выберите пустой проект и дайте вашему проекту имя. Например: VS_example.

Шаг 2. Загрузите файл C ++
В главном окне Visual Studio выберите файл и откройте файл C ++, который вы хотите загрузить в проект. Код в вашем файле будет загружен в левой части экрана. Однако файл не был загружен в качестве исходного файла. Для этого откройте проводник на своем компьютере, затем щелкните и перетащите файл C ++ в папку «Исходные файлы». Это находится в окне обозревателя решений справа. Теперь вы увидите файл в разделе “Исходные файлы”.
Шаг 3. Компиляция исходных файлов
Давайте теперь попробуем скомпилировать наши файлы кода. Убедитесь, что в ваших настройках вверху Visual Studio указано «Отладка» и x64 (для Windows 64) или x86 (для Windows 32). Затем щелкните правой кнопкой мыши имя проекта и выберите «Build». Это приведет к появлению сообщения об ошибке в окне списка ошибок.
Шаг 4. Определите ошибку
в Список ошибок, в сообщении об ошибке указано, что в коде C ++ есть команда с именем include. Не удалось найти файл octeract.h, который вызывает эта команда.

Шаг 5. Включите заголовок
Чтобы показать Visual Studio, где найти этот файл, перейдем к свойствам щелкнув правой кнопкой мыши папку проекта. Убедитесь, что в верхней части окна свойств для конфигурации установлено значение «Отладка», а для платформы установлено значение x64 или Win32 (для Windows 64 или Windows 32 соответственно). Выберите C/C ++ и выберите редактирование дополнительных каталогов включения. Это откроет другое окно. В пустое место вставьте путь к папке с файлом заголовка. Например: C: Program Files (x86) Octeract include . Затем нажмите OK и примените это изменение.
Шаг 6. Перестройка
Отсюда вы можете попробовать скомпилировать исходные файлы снова, щелкнув правой кнопкой мыши имя проекта и выбрав перестроить. Это приведет к различным ошибкам. Эти ошибки показывают, что в нашем коде используются команды, определенные в библиотеке, которую компилятор не может найти. Вам нужно будет установить ссылку на эту библиотеку.
Шаг 7. Ссылка на библиотеку
Чтобы показать компилятор где найти библиотеку, щелкните правой кнопкой мыши папку проекта и выберите свойства. В этом окне убедитесь, что для конфигурации установлено значение «Отладка», а для платформы установлено значение x64 (для Windows 64) или Win32 (для Windows 32). Выберите «Компоновщик» и используйте стрелку раскрывающегося списка, чтобы выбрать «Вход» из списка свойств компоновщика. Выберите Дополнительные зависимости для редактирования. Это откроет другое окно. В пустое место вставьте путь к библиотеке, на которую хотите создать ссылку. Например: C: Program Files (x86) Octeract bin libocteract.lib . Затем нажмите OK и примените изменения.
Шаг 8: скомпилируйте программу
Отсюда щелкните правой кнопкой мыши на название проекта и выберите «Восстановить». Теперь ошибок быть не должно. Отсутствие ошибок означает, что мы можем начать компиляцию. Для этого измените параметр в верхней части Visual Studio с «Отладка» на «Выпуск». Щелкните правой кнопкой мыши папку проекта, чтобы открыть Свойства. В этом окне измените конфигурацию на «Release». Затем мы добавим заголовок и ссылку на библиотеку. Для этого выполните шаги 5 и 7 выше. После добавления путей щелкните правой кнопкой мыши имя проекта и выберите «Перестроить». Теперь программа C ++ скомпилирована, и компилятор создал файл .exe.
Шаг 9: Выполните файл (необязательно)
Теперь вы сможете выполнить этот файл из сеанса PowerShell. Для этого просто используйте путь, по которому сохранен файл .exe.. Например: C: Users Octeract source repos VS_example x64 Release VS_example.exe .
Отсюда вы сможете увидеть решение, напечатанное на экране в PowerShell.

И все.
Вы только что скомпилировали Программа на C ++ – молодец!
Связанное содержимое
Как скомпилировать файлы C в терминале
Может кто-нибудь подскажет, как компилировать из командной строки ясным и кратким образом. Желательно, чтобы мои программы были написаны в реальном текстовом редакторе (например, в блокноте).
Фон
Я завершите n00b, когда дело доходит до Linux, C и Raspberry Pi. Итак, все трое объединились в идеальный шторм для атаки!
Я создал файл C с именем main.c в папке. Каталог:
/home/pi/Desktop/Data Base/main.c
Код C – это простая программа Hello World – мне не нужно здесь объяснять. Итак, я, естественно, решил скомпилировать свой код на C, и именно здесь я прихожу в убыток. Я набираю
gcc -o hello main.c
, как сказано в этом руководстве, но прихожу к ошибке:
gcc: error: main.c: Нет такого файла или каталога
Когда я сделал nano , я попал в странное окно, но я не знал, как сохранить то, что написал.
Большое спасибо – меня это сильно беспокоило.
НЕ используйте nano (или другой текстовый редактор для вставки кода) с правами root/sudo (т. е. не редактируйте с помощью sudo nano , используйте только nano ), если все, что вы делаете, – это личные вещи, которые не нужны права суперпользователя.
Для компиляции из командной строки (при условии, что yourcode.c – это имя вашего файла C, а program имя результирующей программы после компиляции):
- Напишите свой код в вашем любимом редакторе:
- В терминале введите nano yourcode.c (при условии, что вы хотите использовать nano);
- Или воспользуйтесь редактором Leafpad (и сделайте обязательно знать , где сохранен ваш файл).
- Вернуться к erminal, перейдите туда, где хранится ваш файл C. (Напоминание: ls для отображения содержимого каталога, cd для изменения каталога.)
- Скомпилируйте свой код с помощью gcc -o program yourcode.c .
- Выполните его с помощью ./program . Готово!
Бонусный метод
Если вы намереваетесь довольно много компилировать/выполнять свою программу, вы можете сэкономить время, написав Makefile . Создайте этот файл с помощью Leafpad (или, в терминале, nano Makefile ), затем напишите:
all: gcc -o program yourcode.c ./program
(Убедитесь, что вы сейчас используете Tab для отступов, а не пробелов.) Затем каждый раз, когда вы просто набираете make в терминале (или make all , но давайте будем краткими!), ваша программа скомпилируется и выполнится.
Тестирование
Хотите убедиться, что ваша установка GCC работает? Скопируйте и вставьте в свой терминал следующее:
cd/tmpcat main.c # include int main () EOFgcc -o hello main.c./hello # Нажмите Enter, чтобы выполнить вашу программу
Если появится эхо «Hello World», то все в порядке.
Улучшите этот ответ
отредактировано 27 марта ’13, в 22:16
ответил 27 марта ’13 в 20:55
Это действительно отличный учебник, заслуживающий большего количества голосов. – Дэвид Рефуа 06 мар. ’17 в 20:08
добавить комментарий |
НЕ используйте nano (или другой текстовый редактор, чтобы поместить свой код в ) с разрешениями root/sudo (т.е. не редактируйте с помощью sudo nano , используйте только nano ), если все вы являются личными вещами, которые не требуют прав суперпользователя.
Для компиляции из командной строки (при условии, что yourcode.c – это имя вашего C файл и program имя полученной программы после компиляции):
- Напишите свой код в вашем любимом редакторе :
- В терминале введите nano yourcode.c (при условии, что вы хотите использовать nano);
- Или используйте свой редактор Leafpad (и убедитесь, что знают , где сохранен ваш файл).
- Вернитесь в терминал и перейдите туда, где хранится ваш файл C. (Напоминание: ls для вывода списка содержимого каталога, cd для изменения каталога.)
- Скомпилируйте свой код с помощью gcc -o program yourcode.c .
- Выполните его с помощью ./программа . Готово!
Бонусный метод
Если вы намереваетесь довольно много компилировать/выполнять свою программу, вы можете сэкономить время, написав Makefile . Создайте этот файл с помощью Leafpad (или, в терминале, nano Makefile ), затем напишите:
all: gcc -o program yourcode.c ./program
(Убедитесь, что вы сейчас используете Tab для отступов, а не пробелов.) Затем каждый раз, когда вы просто набираете make в терминале (или make all , но давайте будем краткими!), ваша программа скомпилируется и выполнится.
Тестирование
Хотите убедиться, что ваша установка GCC работает? Скопируйте и вставьте в свой терминал следующее:
cd/tmpcat main.c # include int main () EOFgcc -o hello main.c./hello # Нажмите Enter, чтобы выполнить вашу программу
Если появится эхо «Hello World», то все в порядке.
Компилировать программы C на raspberry pi довольно просто. Сначала создайте свою программу в текстовом редакторе и сохраните ее как .c Она должна быть сохранена на рабочем столе.
Затем откройте терминал. В нем введите:
cd Desktop
Это изменяет каталог, на который смотрит терминал, на рабочий стол. Здесь же хранится наша программа.
gcc -Wall .c -o
Здесь происходит самое интересное. GCC – это компилятор, он делает ваш код исполняемым. -Wall активирует предупреждения компилятора – это чрезвычайно полезно для отладки. Следующая строка .c сообщает компьютеру, где хранится код. -o – это вариант – он сообщает GCC о компиляции. Наконец, – это имя вашей новой программы.
Файлы предкомпилированных заголовков
При создании проекта в Visual Studio в pch.h проект добавляется предварительно скомпилируемый файл заголовка. (В Visual Studio 2017 и более ранних версиях файл был вызван stdafx.h .) Цель файла — ускорить процесс сборки. Здесь следует включить любые стабильные файлы заголовков, например заголовки стандартной библиотеки, такие как . Предкомпилированный заголовок компилируется только в том случае, если он или какие-либо содержащиеся в нем файлы были изменены. Если изменения вносятся только в исходный код проекта, при сборке будет пропущена компиляция для предкомпилированного заголовка.
Параметры компилятора для предварительно скомпилированных заголовков. /Y На страницах свойств проекта параметры находятся в разделе «Свойства>конфигурации C/C++>Precompiled Headers». Можно не использовать предкомпилированные заголовки, а также указать имя файла заголовка и путь к выходному файлу.
Настраиваемый предварительно скомпилированный код
Для больших проектов, для которых требуется значительное время, может потребоваться создать настраиваемые предварительно скомпилированные файлы. Компиляторы Microsoft C и C++ содержат параметры для предварительной компиляции любого кода C или C++, включая встроенный код. С помощью этой функции производительности можно скомпилировать стабильный текст кода, сохранить скомпилированное состояние кода в файле и во время последующих компиляций объединить предварительно скомпилированный код с кодом, который все еще находится в процессе разработки. Каждая более поздняя компиляция выполняется быстрее, так как стабильный код не требуется перекомпилировать.
Когда следует предварительно компилировать исходный код
Предварительно скомпилированный код полезен во время цикла разработки, чтобы сократить время компиляции, особенно если:
- Всегда используется большой текст кода, в который редко вносятся изменения.
- Программа состоит из нескольких модулей, каждый из которых использует стандартный набор включаемых файлов, а также одни и те же параметры компиляции. В этом случае все включаемые файлы можно предварительно скомпилировать в один предкомпилированный заголовок. Дополнительные сведения о новых способах обработки файлов см. в разделе «Сравнение единиц заголовков», модулей и предварительно скомпилированных заголовков.
Первая компиляция (которая создает предварительно скомпилированный файл заголовка) занимает немного больше времени, чем последующие компиляции. Последующие компиляции могут выполняться быстрее, включая предварительно скомпилированный код.
Можно предварительно скомпилировать программы C и C++. В программировании C++ обычно рекомендуется разделить сведения о интерфейсе класса в файлы заголовков. Впоследствии эти файлы заголовков можно будет включать в программы, использующие класс. Предварительная компиляция этих заголовков позволяет сократить время, затрачиваемое программой на компиляцию.
Хотя для каждого исходного файла можно использовать только один предварительно скомпилируемый заголовок ( .pch ), можно использовать несколько .pch файлов в проекте.
Два варианта для предварительной компиляции кода
Вы можете предварительно компилировать любой код C или C++; Вы не ограничиваетесь предварительной компиляцией только файлов заголовков.
Для предварительной компиляции требуется планирование, но она предлагает гораздо быстрее компиляцию, если предварительно компилировать исходный код, отличный от простых файлов заголовков.
Код предварительной компиляции, когда вы знаете, что исходные файлы используют общие наборы файлов заголовков или если требуется включить исходный код в предварительной компиляции.
Параметры предварительно скомпилированного заголовка: /Yc (создание предварительно скомпилированного файла заголовка) и /Yu (использование предварительно скомпилированного файла заголовка). Используется /Yc для создания предварительно скомпилированного заголовка. При использовании с необязательным hdrstop pragma /Yc позволяет предварительно компилировать файлы заголовков и исходный код. Выберите /Yu для использования существующего предварительно скомпилированного заголовка в существующей компиляции. Можно также использовать /Fp с /Yc параметрами и /Yu для предоставления альтернативного имени предварительно скомпилированного заголовка.
Справочные статьи о параметрах /Yu компилятора и /Yc о том, как получить доступ к этой функции в среде разработки.
Предкомпилированные правила согласованности заголовков
Так как PCH-файлы содержат сведения о среде компьютера и адресе памяти о программе, следует использовать только PCH-файл на компьютере, где он был создан.
Правила согласованности для использования предварительно скомпилированных заголовков для каждого файла
Параметр /Yu компилятора позволяет указать, какой PCH-файл следует использовать.
При использовании PCH-файла компилятор предполагает ту же среду компиляции, которая действует при создании PCH-файла, если не указано в противном случае. Среда компиляции включает параметры компилятора, pragmas и т. д. Если компилятор обнаруживает несогласованность, он выдает предупреждение и по возможности определяет несогласованность. Такие предупреждения не обязательно указывают на проблему с файлом PCH. Они просто предупреждают о возможных конфликтах. Требования к согласованности для файлов PCH описаны в следующих разделах.
Согласованность параметров компилятора
Следующие параметры компилятора могут вызвать предупреждение о несогласованности при использовании файла PCH:
- Макросы, созданные с помощью параметра препроцессора ( /D ), должны совпадать между компиляцией, созданной PCH-файлом и текущей компиляцией. Состояние определенных констант не проверка, но непредсказуемые результаты могут возникнуть при изменении этих макросов.
- PCH-файлы не работают с параметрами и /EP параметрами /E .
- PCH-файлы должны создаваться с помощью параметра «Создать сведения о обзоре» или параметра «Исключить локальные переменные» ( /FR/Fr ) перед последующими компиляциями, которые используют PCH-файл, могут использовать эти параметры.
Совместимая с C 7.0 ( /Z7 )
Если этот параметр действует при создании PCH-файла, последующие компиляции, использующие PCH-файл, могут использовать сведения об отладке.
Если параметр C 7.0-Совместимый ( /Z7 ) не действует при создании PCH-файла, последующие компиляции, использующие PCH-файл и /Z7 запускающие предупреждение. Сведения об отладке помещаются в текущий .obj файл, а локальные символы, определенные в PCH-файле, недоступны для отладчика.
Включение согласованности путей
PCH-файл не содержит сведения о пути к заголовку, который был в действии при создании. При использовании PCH-файла компилятор всегда использует путь включения заголовка, указанный в текущей компиляции.
Согласованность исходного файла
При указании параметра Use Precompiled Header File ( /Yu ) компилятор игнорирует все директивы препроцессора (включая pragmas), которые отображаются в исходном коде, который будет предварительно компилирован. Компиляция, указанная такими директивами препроцессора, должна совпадать с компиляцией, используемой для параметра Create Precompiled Header File () ( /Yc ).
Согласованность pragma
Pragmas, обработанный во время создания PCH-файла, обычно влияет на файл, с которым PCH-файл будет использоваться позже. message И comment pragmas не влияют на оставшуюся часть компиляции.
Эти прагмы влияют только на код в PCH-файле; Они не влияют на код, который позже использует PCH-файл:
Эти прагмы сохраняются как часть предкомпилированного заголовка и влияют на оставшуюся часть компиляции, использующую предкомпилированный заголовок:
alloc_text
auto_inline
check_stack
code_seg
data_seg
function
include_alias
init_seg
inline_depth
inline_recursion
intrinsic
optimize
pack
pointers_to_members
setlocale
vtordisp
warning
Правила согласованности для /Yc и /Yu
При использовании предварительно скомпилированного заголовка, созданного с помощью или /Yc /Yu , компилятор сравнивает текущую среду компиляции с той, которая существовала при создании PCH-файла. Не забудьте указать среду, соответствующую предыдущей (с помощью параметров компилятора, прагм и т. д.) для текущей компиляции. Если компилятор обнаруживает несогласованность, он выдает предупреждение и по возможности определяет несогласованность. Такие предупреждения не обязательно указывают на проблему с файлом PCH. Они просто предупреждают о возможных конфликтах. В следующих разделах объясняются требования к согласованности для предкомпилированных заголовков.
Согласованность параметров компилятора
В таблице ниже перечислены параметры компилятора, которые могут вызвать предупреждение о несогласованности при использовании предкомпилированного заголовка.
| Вариант | Имя | Правило |
|---|---|---|
| /D | Определение констант и макросов | Должны быть одинаковыми в компиляции, создавшей предкомпилированный заголовок, и в текущей компиляции. Состояние определенных констант не проверка. Однако непредсказуемые результаты могут возникать, если файлы зависят от значений измененных констант. |
| /E или /EP | Копирование выходных данных препроцессора в стандартный вывод | Предварительно скомпилированные заголовки не работают с параметром или /EP параметром /E . |
| /Fr или /FR | Создание сведений о браузере исходного кода Майкрософт | /Fr /FR Чтобы параметры были допустимыми с параметром /Yu , они также должны быть в действии при создании предварительно скомпилированного заголовка. При последующих компиляциях, использующих предкомпилированный заголовок, также создаются сведения о браузере исходного кода. Сведения браузера помещаются в один .sbr файл и ссылаются на другие файлы таким же образом, как и сведения CodeView. Невозможно переопределить размещение сведений о исходном браузере. |
| /GA , /GD , /GE , /Gw или /GW | Параметры протокола Windows | Должны быть одинаковыми в компиляции, создавшей предкомпилированный заголовок, и в текущей компиляции. Компилятор выдает предупреждение, если эти параметры отличаются. |
| /Zi | Создание полной отладочной информации | Если при создании предкомпилированного заголовка этот параметр включен, последующие компиляции, использующие предварительную компиляцию, могут использовать отладочную информацию. Если /Zi он не действует при создании предварительно скомпилированного заголовка, последующие компиляции, использующие предварительную компиляцию, и /Zi параметр активирует предупреждение. Сведения об отладке помещаются в текущий файл объекта, а локальные символы, определенные в предварительно компилированного заголовка, недоступны для отладчика. |
Средство предварительно откомпилированных заголовков предназначено для использования только в исходных файлах C и C++.
Использование предварительно скомпилированных заголовков в проекте
В предыдущих разделах представлен обзор предкомпилированных заголовков: /Yc и /Yu, параметра /FP и прагмы hdrstop. В этом разделе описывается метод использования в проекте параметров заголовков, предкомпилированных вручную. В конце раздела приводится пример файла makefile и кода, который управляет им.
Для другого подхода к использованию параметров предварительно скомпилированного заголовка вручную в проекте изучите один из файлов makefile, расположенных в MFC\SRC каталоге, созданном во время настройки Visual Studio по умолчанию. Эти файлы makefile принимают аналогичный подход к тому, который представлен в этом разделе. Они обеспечивают более широкий доступ к макросам программы обслуживания (NMAKE) и обеспечивают более широкий контроль над процессом сборки.
PCH-файлы в процессе сборки
База кода проекта программного обеспечения часто содержится в нескольких исходных файлах C или C++, файлах объектов, библиотеках и файлах заголовков. Как правило, файл makefile координирует объединение этих элементов в исполняемый файл. На следующем рисунке показана структура файла makefile, использующего файл предкомпилированного заголовка. Имена макросов NMAKE и имена файлов на этой схеме согласованы с примером кода, найденного в примере файла makefile для PCH и примера кода для PCH.
На рисунке для отображения последовательности процесса сборки используются три схематических элемента. Прямоугольники представляют каждый файл или макрос; три макроса представляют один или несколько файлов. Затененные области представляют каждое действие компиляции или компоновки. Стрелки показывают, какие файлы и макросы объединяются во время процесса компиляции или компоновки.
Структура файла makefile, использующего предварительно скомпилированные файл заголовка:
На схеме показаны каналы «$(STABLEHDRS)» и «$(BOUNDRY)» в cl /c /W3 /Yc$(BOUNDRY) applib.cpp myapp.cpp. Выходные данные этого значения — $(STABLE. PCH). Затем applib.cpp и $(UNSTABLEHDRS) и $(STABLE. Канал PCH) в CL /c /w3 /Yu $(BOUNDRY) applib.cpp, который создает applib.obj. myapp.cpp, $(UNSTABLEHDR) и $(STABLE. PCH) канал в CL /c /w3 /Yu $(BOUNDRY) myapp.cpp, который создает myapp.obj. Наконец, applib.obj и myapp.obj объединяются LINK /NOD ONERROR:NOEXE $(OBJS), myapp, NUL, $(LIBS), NUL для создания myapp.exe.
Начиная с верхней части схемы, оба STABLEHDRS и BOUNDRY являются макросами NMAKE, в которых не требуется перекомпиляция файлов. Эти файлы компилируются с помощью командной строки
CL /c /W3 /Yc$(BOUNDRY) applib.cpp myapp.cpp
только в том случае, если предварительно скомпилированные файлы заголовков ( STABLE.pch ) не существуют или если вы вносите изменения в файлы, перечисленные в двух макросах. В любом случае предварительно скомпилированные файлы заголовков будут содержать код только из файлов, перечисленных в макросе STABLEHDRS . Перечислите последний файл, который необходимо предварительно скомпилировать в макросе BOUNDRY .
Файлы, перечисленные в этих макросах, могут быть файлами заголовков или файлами исходного кода C или C++. (Один PCH-файл нельзя использовать как с источниками C, так и с C++.) Макрос можно использовать hdrstop для остановки предварительной компиляции в какой-то момент в BOUNDRY файле. Дополнительные сведения см. в разделе hdrstop .
Далее на схеме представлен код поддержки, APPLIB.obj используемый в последнем приложении. Он создается из APPLIB.cpp файлов, перечисленных в UNSTABLEHDRS макросе, и предварительно скомпилированного кода из предварительно скомпилированного заголовка.
MYAPP.obj представляет окончательное приложение. Он создается из MYAPP.cpp файлов, перечисленных в UNSTABLEHDRS макросе, и предварительно скомпилированного кода из предварительно скомпилированного заголовка.
Наконец, исполняемый файл ( MYAPP.EXE ) создается путем связывания файлов, перечисленных в OBJS макросе ( APPLIB.obj и MYAPP.obj ).
Пример файла makefile для PCH
В следующем файле makefile используются макросы и !IF !ELSE структура команд управления , !ENDIF которая упрощает адаптацию проекта.
# Makefile : Illustrates the effective use of precompiled # headers in a project # Usage: NMAKE option # option: DEBUG=[0|1] # (DEBUG not defined is equivalent to DEBUG=0) # OBJS = myapp.obj applib.obj # List all stable header files in the STABLEHDRS macro. STABLEHDRS = stable.h another.h # List the final header file to be precompiled here: BOUNDRY = stable.h # List header files under development here: UNSTABLEHDRS = unstable.h # List all compiler options common to both debug and final # versions of your code here: CLFLAGS = /c /W3 # List all linker options common to both debug and final # versions of your code here: LINKFLAGS = /nologo !IF "$(DEBUG)" == "1" CLFLAGS = /D_DEBUG $(CLFLAGS) /Od /Zi LINKFLAGS = $(LINKFLAGS) /COD LIBS = slibce !ELSE CLFLAGS = $(CLFLAGS) /Oselg /Gs LINKFLAGS = $(LINKFLAGS) LIBS = slibce !ENDIF myapp.exe: $(OBJS) link $(LINKFLAGS) @
STABLEHDRS BOUNDRY Помимо макросов, UNSTABLEHDRS показанных на рисунке "Структура файла Makefile, использующего предварительно скомпилированные файл заголовка" в PCH-файлах в процессе сборки, этот файл makefile предоставляет CLFLAGS макрос и LINKFLAGS макрос. Эти макросы необходимо использовать для перечисления параметров компилятора и компоновщика, которые применяются при сборке отладочной или финальной версии исполняемого файла приложения. Существует также LIBS макрос, в котором перечислены библиотеки, необходимые для проекта.
Файл makefile также использует !IF !ELSE , !ENDIF чтобы определить, определен ли символ в командной DEBUG строке NMAKE:
NMAKE DEBUG=[1|0]
Эта функция позволяет использовать тот же файл makefile во время разработки и для окончательных версий программы. Используется DEBUG=0 для окончательных версий. Следующие строки команды являются эквивалентными.
NMAKE NMAKE DEBUG=0
Дополнительные сведения о файлах makefile см . в справочнике ПО NMAKE. Также см . параметры компилятора MSVC и параметры компоновщика MSVC.
Пример кода для PCH
Следующие исходные файлы используются в файле makefile, описанном в PCH-файлах в процессе сборки и образце файла makefile для PCH. Комментарии содержат важные сведения.
Исходный файл ANOTHER.H :
// ANOTHER.H : Contains the interface to code that is not // likely to change. // #ifndef __ANOTHER_H #define __ANOTHER_H #include void savemoretime( void ); #endif // __ANOTHER_H
Исходный файл STABLE.H :
// STABLE.H : Contains the interface to code that is not likely // to change. List code that is likely to change // in the makefile's STABLEHDRS macro. // #ifndef __STABLE_H #define __STABLE_H #include void savetime( void ); #endif // __STABLE_H
Исходный файл UNSTABLE.H :
// UNSTABLE.H : Contains the interface to code that is // likely to change. As the code in a header // file becomes stable, remove the header file // from the makefile's UNSTABLEHDR macro and list // it in the STABLEHDRS macro. // #ifndef __UNSTABLE_H #define __UNSTABLE_H #include void notstable( void ); #endif // __UNSTABLE_H
Исходный файл APPLIB.CPP :
// APPLIB.CPP : This file contains the code that implements // the interface code declared in the header // files STABLE.H, ANOTHER.H, and UNSTABLE.H. // #include"another.h" #include"stable.h" #include"unstable.h" using namespace std; // The following code represents code that is deemed stable and // not likely to change. The associated interface code is // precompiled. In this example, the header files STABLE.H and // ANOTHER.H are precompiled. void savetime( void ) < cout void savemoretime( void ) < cout // The following code represents code that is still under // development. The associated header file is not precompiled. void notstable( void )
Исходный файл MYAPP.CPP :
// MYAPP.CPP : Sample application // All precompiled code other than the file listed // in the makefile's BOUNDRY macro (stable.h in // this example) must be included before the file // listed in the BOUNDRY macro. Unstable code must // be included after the precompiled code. // #include"another.h" #include"stable.h" #include"unstable.h" int main( void )
