Visual studio компиляция без зависимостей

Обновлено: 05.07.2024

Если в решении есть проекты, которые зависят друг от друга, т. е. один проект зависит от типов другого проекта и использует их, то Visual Studio должна знать порядок сборки про­ектов. Для примера рассмотрим проект приложения Windows, который использует типы, предоставляемые проектом библиотеки классов. Если в последовательности сборки сначала не будет собрана библиотека классов, то процесс сборки закончится неудачно.

В большинстве случаев Visual Studio способна сама определить правильную последователь­ность сборки. Однако иногда вам может понадобиться вручную указать, что некий проект зависит от других проектов. Для предоставления такой информации используйте страницу свойств Project Dependencies (рис. 4.7). Выберите проект в раскрывающемся списке, а за­тем укажите, от каких решений он зависит (для этого нужно отметить проекты в окне списка Depends on).

Местоположение файлов исходных кодов для отладки

В определенных ситуациях вам может понадобиться явно указать отладчику Visual Studio файлы исходных кодов для использования в процессе работы отладчика.

Настройка зависимостей проекта
Описание: image63

Настройка зависимостей проекта

Одна из таких ситуаций — это когда вы пытаетесь отлаживать решение, которое ссылается на объект на удаленном компьютере. Если файл исходного кода для этого удаленного объ­екта на локальном компьютере отсутствует, то вы можете явно указать для Visual Studio файлы исходных кодов.

Для того чтобы добавить элемент в любое из полей, сначала поместите ваш курсор в поле, а затем щелкните кнопку New Line (вверху справа в диалоговом окне). Это позволит вам вве­сти полностью квалифицированный путь к нужному каталогу. Удаляется элемент путем его выделения и последующего щелчка по кнопке Cut Line. Кнопка Check Entries позволяет вам еще раз перепроверить, что все элементы указывают на правильные и доступные пути к каталогам.

Если вы загрузили решение с проектами на языке Visual C++, то, вероятно, сразу же увидите несколько элементов в списке Directories containing source 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

Я работаю в организации с пакетом продуктов, основанным на нескольких сотнях решений Visual Studio (в основном C ++). Некоторые из этих решений создают библиотеки, которые используются другими решениями, а также существует общая папка «include», содержащая заголовки, которые совместно используются несколькими модулями.

Проблема в том, что зависимости нигде явно не указаны, и система сборки разрешает зависимости, задав линейный порядок сборки, который гарантирует, что зависимые модули будут построены в нужное время. Это хорошо работает для системы сборки, но оставляет разработчиков в невыгодном положении, когда они пытаются работать с компонентами со многими прямыми и косвенными внешними зависимостями. Например, я мог бы захотеть отредактировать один из проектов библиотеки или общих заголовков, а затем построить все затронутые модули, не обязательно заранее зная, какие из них затронуты. Другой вариант использования включает создание модуля после выполнения свежего извлечения из TFS и создание модулей, от которых он зависит, в первую очередь без необходимости сборки всей системы.

Мне интересно, есть ли какие-либо инструменты, которые могут автоматизировать создание зависимостей для создания больших проектов. Я подумал о создании нескольких действительно больших решений, которые инкапсулируют другие решения, но это кажется действительно неудобным и неуклюжим. Кроме того, мне не нравится идея о том, чтобы разработчики вручную указывали зависимости, поскольку это может привести к ошибкам, особенно с такой большой базой кода. Я работал со scons несколько лет назад, и мне очень понравилось, как он может анализировать исходные файлы и автоматически обнаруживать все зависимости зависимостей. Есть ли сегодня что-нибудь, что может сделать то же самое с решениями Visual Studio?

Мне нужно подчеркнуть масштаб проблемы, которую я пытаюсь решить. Это очень большая существующая кодовая база. В основном каталоге есть несколько сотен подпапок, каждая из которых содержит одно или несколько решений VS (не проекты). Каждое решение, в свою очередь, содержит один или несколько проектов. Как я уже сказал, я не пытаюсь установить зависимости между несколькими проектами в решении. Проблема гораздо серьезнее. Я пытаюсь найти способ установить зависимости между самими решениями (их несколько сотен). Например, одно решение может содержать некоторые проекты, которые генерируют библиотеки для безопасности, другие - для связи и т. Д. Могут быть, например, десятки решений, использующих библиотеки связи. По сути, я пытаюсь создать ориентированный циклический граф с сотнями узлов и потенциально десятками тысяч ребер.

Перед написанием нашей первой программы мы еще должны кое-что узнать.

Теория

Во-первых, несмотря на то, что код ваших программ находится в файлах .cpp, эти файлы добавляются в проект. Проект содержит все необходимые файлы вашей программы, а также сохраняет указанные вами настройки вашей IDE. Каждый раз, при открытии проекта, он запускается с того момента, на котором вы остановились в прошлый раз. При компиляции программы, проект говорит компилятору и линкеру, какие файлы нужно скомпилировать, а какие связать. Стоит отметить, что файлы проекта одной IDE не будут работать в другой IDE. Вам придется создать новый проект (в другой IDE).

В-третьих, при создании нового проекта большинство IDE автоматически добавят ваш проект в рабочее пространство. Рабочее пространство — это своеобразный контейнер, который может содержать один или несколько связанных проектов. Несмотря на то, что вы можете добавить несколько проектов в одно рабочее пространство, все же рекомендуется создавать отдельное рабочее пространство для каждой программы. Это намного упрощает работу для новичков.

Традиционно, первой программой на новом языке программирования является всеми известная программа «Hello, world!». Мы не будем нарушать традиции 🙂

Пользователям Visual Studio

Для создания нового проекта в Visual Studio 2019, вам нужно сначала запустить эту IDE, затем выбрать "Файл" > "Создать" > "Проект" :


Дальше появится диалоговое окно, где вам нужно будет выбрать "Консольное приложение Windows" из вкладки "Visual C++" и нажать "ОК" :


Также вы можете указать имя проекта (любое) и его расположение (рекомендую ничего не менять) в соответствующих полях.

В текстовом редакторе вы увидите, что уже есть некоторый текст и код — удалите его, а затем напечатайте или скопируйте следующий код:

В наше время 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".

При возникновении других проблем можно попробовать их загуглить, возможно, что кто-то уже сталкивался с ними и решил их.

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