> For the complete documentation index, see [llms.txt](https://skkv-itmo.gitbook.io/c-cpp-cookies/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skkv-itmo.gitbook.io/c-cpp-cookies/environments/ide/visual-studio/tools-vs.md).

# Код в Visual Studio

Все параметры и данные для сборки настраиваются через свойства решений и проектов в IDE Vusial Studio. Если в решении несколько проектов, то системе сборки MSBuild можно задать правила и порядок сборки проектов, что может быть полезно, если имеется зависимость между проектами в решении.

В нашем случае будет 1 проект в 1 решении и далее мы будем рассматривать только настройки проекта (ПКМ по проекту – Properties).

В первую очередь настоятельно рекомендуется установить общие для всех конфигураций и платформ настройки, установив **Configurations** и **Platforms** в **All**. Затем уже устанавливать параметры, различные для конфигураций и платформ. Это сильно сэкономит времени и нервов `:)`

В первой вкладке `General` можно настроить используемый `toolset`, название выходного файла, стандарт языка и пр.

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-b97eaaee5c09f3d02d7cc03d93e03cd2a122ab3d%2Fmsbuild-2.png?alt=media)

**Toolset** – набор инструментов платформы, состоящий из компилятора C++ (cl.exe) и компоновщика (link.exe), а также стандартных библиотек C/C++.

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-513ac7d596583bea3cdd9b91601f47b9aafc24af%2Fmsbuild-toolset2.png?alt=media)

По умолчанию будет доступен 1 `toolset` той VS, которая была установлена (например 2022). Через Visual Studio Installer можно поставить `toolset` более ранних VS, а также поставить `clang` (LLVM-Clang на скрине). Помимо этого компилятор Intel имеет интеграцию в VS и после установки также будет доступен в выпадающем списке.

**Target name** – имя выходного файла. Аналог `-o` у clang-а.

Стандарт языка позволяет явно задать под какой стандарт будет собираться программа. аналог `-std=` у clang-а.

Во вкладке **Отладка** можно настроить рабочую директорию и аргументы командной строки.

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-5b9e82b1da68c61a45a1b8126b24afc9511dd2f5%2Fmsbuild-debugging.png?alt=media)

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

На скриншотах выше вы могли заметить значения вида `$(ProjectDir)` и пр. Это **макросы VS**, которые будут раскрываться при сборке программы. Во что раскрываются макросы можно посмотреть при редактированнии полей:

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-4c1988bfa66ffa2f1afa19c5fbf2977919f703af%2Fmsbuild-vsmacros.png?alt=media)

Попробуем собрать и запустить нашу программу в `Release x64` и `Debug x86`.

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-7965ea5ca84875ee1a59a6868dc4e203ff8cbd9b%2Fmsbuild-run-r64.png?alt=media)

![](https://4112636200-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKMqUSFKgvT06FCJhm51b%2Fuploads%2Fgit-blob-ec904e23a4c03d4051e80bc9e42ea62530b55d0a%2Fmsbuild-d86.png?alt=media)

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

Пример настройки проекта для работы с библиотеками и несколькими исходными файлами: [Подключение внешних библиотек в системе сборки MSBuild (Visual Studio)](https://github.com/RonoveRaum/c-cpp-courses-mirror/blob/main/build/build-systems/libs.md#подключение-внешних-библиотек-в-системе-сборки-msbuild-visual-studio)
