Как добавить библиотеку в Visual Studio 2019

Обновлено: 21.11.2024

Библиотеки на C++ — это наборы кода, написанного кем-то другим. Они избавляют вас от необходимости изобретать велосипед, когда вам нужно реализовать какую-то желаемую функциональность. Вы можете думать о библиотеках как о подключаемом модуле или дополнении, которое дает вам больше возможностей.

Например, я хотел написать программу, способную перемножать две матрицы. Вместо того, чтобы писать код с нуля, я поискал в Интернете библиотеку линейной алгебры на C++, которая содержала функции для умножения матриц. Я нашел библиотеку под названием «Эйген». Я добавил библиотеку в свой проект в интегрированной среде разработки CodeLite и был готов к работе.

Без лишних слов, вот пошаговый процесс добавления внешней библиотеки C++ в ваш проект с помощью интегрированной среды разработки CodeLite и интегрированной среды разработки Visual Studio.

Обратите внимание, что этот процесс будет другим, если вы используете другую IDE для C++, но два основных шага одинаковы для всех IDE:

  1. Добавить путь к файлам заголовков
  2. Добавить путь к фактическому коду (т. е. к библиотеке)

Шаг 1. Перейдите на веб-сайт библиотеки.
Например, для библиотеки линейной алгебры Eigen перейдите на эту страницу: Главная страница Eigen

Шаг 2. Загрузите ZIP-файл, содержащий весь код.

Шаг 3. Разархивируйте ZIP-файл на свой компьютер.

Шаг 4. Откройте CodeLite (т. е. вашу IDE)

Шаг 5. Откройте новый проект

Шаг 6. Щелкните правой кнопкой мыши имя проекта и выберите "Настройки".

Шаг 7. Перейдите на вкладку "Компилятор" и добавьте пути включения:
например, папка, содержащая папку с именем «Eigen»… C:\XYZ\eigen-eigen-21301928\
Здесь компилятор может найти файлы .h (т.е. заголовки)

Шаг 8. Нажмите Linker и добавьте путь поиска библиотек
например, C:\XYZ\eigen-eigen-21301928\
Путь выше должен быть местом, где компоновщик может найти библиотеки (обычно с суффиксом .a, .dll, .lib, .so)

  • Статические библиотеки — XYZ.lib для Windows, UNIX/Linux/Max — libXYZ.a
  • Динамические библиотеки — XYZ.dll для Windows, Unix/Linux/Mac — libXYZ.so

Шаг 9. Перейдите к файлу main.cc (т. е. ваш файл с исходным кодом... также может быть main.cpp) и добавьте директивы препроцессора вверху исходного файла. Вы можете использовать этот код, чтобы проверить правильность настройки.

int main()

MatrixXd m(2,2);
m(0 ,0) = 3;
m(1,0) = 2,5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout

Шаг 3. Разархивируйте ZIP-файл на свой компьютер.

Шаг 4. Переместите папку в какой-либо каталог на вашем компьютере.

Я перемещу его в каталог C:\libraries. На данном этапе Эйген идет по следующему пути для меня:

Шаг 5. Откройте Visual Studio.

Шаг 6. Создайте новый проект C++.

Шаг 7. Напишите следующий код в новый исходный файл.

Я назову этот файл main.cpp.

Шаг 8. Нажмите на вкладку "Проект" вверху и перейдите в раздел "Дополнительные включаемые каталоги".

Проект -> Свойства -> C/C++ -> Общие (его можно найти, развернув маленький треугольник рядом с C/C++) -> Дополнительные включаемые каталоги

Шаг 9. Нажмите на пустое место рядом с «Дополнительные каталоги включения».
Должен появиться небольшой раскрывающийся список в виде треугольника.

Шаг 10. Нажмите .

Шаг 11. Нажмите значок "Добавить новую строку".

Шаг 12. Добавьте путь к папке, содержащей Eigen

Если щелкнуть пустое место, должен появиться значок с тремя точками «…». Щелкните этот значок и добавьте путь к папке, содержащей Eigen.

В моем случае путь:

C:\libraries\eigen-3.3.7\eigen-3.3.7\

потому что настоящей библиотекой Eigen является эта папка:

Шаг 13. Нажмите "ОК".

Шаг 14. Нажмите «Применить», а затем «ОК».

Шаг 15. Перейдите к файлу main.cpp (или как называется исходный код, который вы написали ранее).

Шаг 16. Скомпилируйте и запустите код.

Чтобы скомпилировать код, выберите "Сборка" -> "Сборка решения".

Затем, чтобы запустить код, выберите "Отладка" -> "Начать без отладки".

Вот что вы должны увидеть:

Вот оно! Все готово.

Последние публикации

Свяжитесь со мной в LinkedIn!

Моя цель — познакомиться со всеми, кто любит робототехнику. Свяжитесь со мной в LinkedIn, если вы нашли мою информацию полезной для себя. Также следите за моей страницей в LinkedIn, где я публикую интересный контент, связанный с робототехникой. Не стесняйтесь! Буду рад услышать от вас!

Как импортировать библиотеки в код VS?

Расширение кода Visual Studio: добавление внешних библиотек в проект в виде символических ссылок….Настройки расширения

  1. Открыть панель команд ( Shift+CMD+P в OSX или Shift+Ctrl+P в Windows и Linux).
  2. Найдите «Extlibraries: Добавить внешнюю библиотеку» и нажмите «Введение».
  3. Введите внешний каталог или путь к файлу.
  4. Введите имя и нажмите Intro.

Как связать библиотеку в Visual Studio?

Чтобы добавить . lib в качестве входных данных компоновщика в среде разработки

  1. Откройте диалоговое окно «Страницы свойств» проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio.
  2. Выберите страницу свойств Input в папке Linker.
  3. Измените свойство Дополнительные зависимости, чтобы добавить файл . lib-файлы.

Как добавить библиотеку в проект?

Android Studio импортирует библиотеку в ваш проект и синхронизирует файлы Gradle. Шаг 4: Перейдите на вкладку зависимостей> нажмите кнопку «+» -> нажмите «Зависимость от модуля». Затем библиотечный модуль будет добавлен к зависимостям проекта.

Что такое библиотеки в Visual Studio?

Библиотека классов — это набор определений классов, содержащихся в файле . dll или .exe файл. Чтобы использовать библиотеку классов, вы должны сначала добавить ссылку на библиотеку (см. «Как добавить ссылки в ваш проект Visual Studio»).

Подходит ли Visual Studio для C++?

Microsoft Visual C++ (MSVC) относится к инструментам и библиотекам разработки на языках C++, C и ассемблере, доступным как часть Visual Studio для Windows. Visual Studio 2015, 2017 и 2019 можно установить параллельно.

В чем разница между кодом Visual Studio и Visual Studio?

Visual Studio – это набор инструментов разработки программного обеспечения на основе компонентов и других технологий для создания мощных и высокопроизводительных приложений. С другой стороны, код Visual Studio подробно описан как «Создание и отладка современных веб-приложений и облачных приложений Microsoft». Создавайте и отлаживайте современные веб-приложения и облачные приложения.

Оглавление

Как добавить библиотеку в Visual Studio 2015?

Как добавить класс в Visual Studio 2015?

Чтобы добавить класс в проект Visual Studio C++, в обозревателе решений щелкните проект правой кнопкой мыши, выберите "Добавить", а затем выберите "Класс". Откроется диалоговое окно «Добавить класс». При добавлении класса необходимо указать имя, отличное от уже существующих классов в MFC или ATL.

На каком языке написана DLL?

Файлы DLL используют такие языки, как C или C++, хотя C++ встречается чаще. Вы можете написать свои собственные библиотеки DLL для запуска нужного вам кода, если хотите научиться это делать. Это может быть полезно для вашего проекта и, конечно же, поможет вам хорошо выглядеть взамен.

Где сохранить файлы DLL в Visual Studio?

Можно ли использовать библиотеку динамической компоновки в Visual Studio?

Обычно для ресурсов программы используется динамическая библиотека. Мы можем использовать один файл DLL в нескольких программах. Теперь мы обсудим, как создать файл DLL в Visual Studio 2015 Preview.

Как добавить еще одну библиотеку в Visual Studio?

Добавить один каталог библиотеки для файлов *. lib: Перейдите к проекту (на верхней панели) -> свойства -> Свойства конфигурации -> Каталоги VC++ -> Каталоги библиотек, затем щелкните и отредактируйте и добавьте новую запись.

Как добавить дополнительные зависимости в Visual Studio?

Чтобы добавить . lib в качестве входных данных компоновщика в среде разработки

  1. Откройте диалоговое окно «Страницы свойств» проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio.
  2. Выберите страницу свойств Input в папке Linker.
  3. Измените свойство Дополнительные зависимости, чтобы добавить файл . файлы библиотеки.

Где находится каталог VC++?

В Visual Studio 2008 это можно найти в разделе: Инструменты –> Параметры –> Проекты и решения –> Каталоги VC++.

Как добавить библиотеку в код VS?

Расширение кода Visual Studio: добавление внешних библиотек в проект в виде символических ссылок….Настройки расширения

  1. Открыть панель команд ( Shift+CMD+P в OSX или Shift+Ctrl+P в Windows и Linux).
  2. Найдите «Extlibraries: Добавить внешнюю библиотеку» и нажмите «Введение».
  3. Введите внешний каталог или путь к файлу.
  4. Введите имя и нажмите Intro.

Что такое компоновщик в Visual Studio?

Компоновщик (link.exe) объединяет объектные файлы в один исполняемый файл. Параметры компоновщика можно задать внутри или вне Visual Studio. В Visual Studio вы можете получить доступ к параметрам компоновщика, щелкнув правой кнопкой мыши узел проекта в обозревателе решений и выбрав Свойства, чтобы отобразить страницы свойств.

В чем разница между DLL и lib?

LIB и DLL LIB — это статическая библиотека, в которую можно помещать функции и процедуры и вызывать их во время компиляции приложения. DLL или динамическая библиотека выполняют ту же функцию, но являются динамическими в том смысле, что приложение может вызывать эти библиотеки во время выполнения, а не во время компиляции.

Как получить зависимости в коде VS?

Чтобы назначить зависимости проектам

  1. В обозревателе решений выберите проект.
  2. В меню "Проект" выберите "Зависимости проекта".
  3. На вкладке "Зависимости" выберите проект в раскрывающемся меню "Проект".
  4. В поле "Зависит от" установите флажок для любого другого проекта, который должен быть построен перед этим проектом.

В чем разница между зависимостями и ссылками в Visual Studio?

1 ответ. Единственная разница между «Ссылочным определением проекта» и «Определением зависимостей проекта» заключается в метаданных, которые определяют включение/исключение выходной сборки в/из основной команды связывания проекта.

Как добавить каталоги VC++ в VisualStudio 2019?

Щелкните правой кнопкой мыши узел проекта (не решение верхнего уровня) и выберите «Свойства», чтобы открыть диалоговое окно «Страницы свойств». Выберите Свойства конфигурации > страница свойств Каталоги VC++.

Как добавить дополнительные каталоги в VisualStudio 2019?

Добавление каталога Include Перейдите в диалоговое окно Страницы свойств проекта Visual Studio (в меню «Проект» выберите «Свойства» или щелкните проект правой кнопкой мыши в обозревателе решений). Выберите «Свойства конфигурации», «C/C++», «Общие», а затем добавьте $(PIXELINK_SDK_ROOT)\include в поле «Дополнительные включаемые каталоги».

Как добавить дополнительные библиотеки в Visual Studio?

Для Visual Studio вам нужно щелкнуть правой кнопкой мыши свой проект в обозревателе решений, а затем выбрать Свойства. Затем откройте свойства конфигурации, а затем компоновщик. Теперь вы хотите добавить папку, в которой у вас есть библиотеки Allegro, в Дополнительные каталоги библиотек, Linker -> Input, вы добавите фактические файлы библиотеки в Дополнительные зависимости.

Как установить библиотеку по умолчанию в Visual Studio?

Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Настройка компилятора C++ и свойств сборки в Visual Studio. Выберите страницу свойств Configuration > Linker > Command Line. В разделе «Дополнительные параметры» введите параметр /DEFAULTLIB: библиотека для каждой библиотеки для поиска. Нажмите OK, чтобы сохранить изменения. См. Дополнительные параметры.

Как добавить дополнительный файл lib в VC++?

Используйте список «системных переменных», «Свойства конфигурации -> Каталоги VC++» и «Свойства конфигурации -> Компоновщик -> Общие»; вы можете правильно получить файл *.lib для проекта. И в этих методах вам нужно будет добавить файл *.lib в Дополнительные зависимости. Каталоги, указанные в переменной среды PATH.

Совместима ли библиотека CRT с Visual Studio 2015?

Все версии CRT поддерживают многопоточную разработку. Большинство библиотек поддерживают как статическую компоновку, чтобы напрямую связать библиотеку с вашим кодом, так и динамическую компоновку, чтобы ваш код мог использовать общие файлы DLL. Начиная с Visual Studio 2015, CRT преобразован в новые двоичные файлы.

В этом пошаговом руководстве показано, как создать статическую библиотеку (файл .lib) для использования с приложениями C++. Использование статической библиотеки — отличный способ повторного использования кода. Вместо повторной реализации одних и тех же подпрограмм в каждом приложении, требующем такой функциональности, вы пишете их один раз в статической библиотеке, а затем ссылаетесь на нее из приложений. Код, связанный со статической библиотекой, становится частью вашего приложения — вам не нужно устанавливать другой файл, чтобы использовать этот код.

Это пошаговое руководство охватывает следующие задачи:

Предпосылки

Понимание основ языка C++.

Создать проект статической библиотеки

Инструкции по созданию проекта зависят от вашей версии Visual Studio. Чтобы просмотреть документацию для предпочитаемой версии Visual Studio, используйте элемент управления выбора версии.Он находится в верхней части оглавления на этой странице.

Чтобы создать проект статической библиотеки в Visual Studio

В строке меню выберите «Файл» > «Создать» > «Проект», чтобы открыть диалоговое окно «Создать новый проект».

В верхней части диалогового окна установите для параметра "Язык" значение C++, для параметра "Платформа" выберите значение "Windows" и для параметра "Тип проекта" выберите значение "Библиотека".

В отфильтрованном списке типов проектов выберите Мастер рабочего стола Windows, а затем нажмите кнопку Далее.

На странице "Настройка нового проекта" введите MathLibrary в поле "Имя проекта", чтобы указать имя проекта. Введите StaticMath в поле Имя решения. Нажмите кнопку «Создать», чтобы открыть диалоговое окно «Проект рабочего стола Windows».

В диалоговом окне "Проект рабочего стола Windows" в разделе "Тип приложения" выберите "Статическая библиотека (.lib)".

В разделе Дополнительные параметры снимите флажок Предварительно скомпилированный заголовок, если он установлен. Установите флажок Пустой проект.

Нажмите «ОК», чтобы создать проект.

Чтобы создать проект статической библиотеки в Visual Studio 2017

В строке меню выберите «Файл» > «Создать» > «Проект».

В диалоговом окне "Новый проект" выберите "Установлено" > "Visual C++" > "Рабочий стол Windows". На центральной панели выберите Мастер рабочего стола Windows.

Укажите имя проекта, например MathLibrary, в поле Имя. Укажите имя решения, например StaticMath, в поле Имя решения. Нажмите кнопку ОК.

В диалоговом окне "Проект рабочего стола Windows" в разделе "Тип приложения" выберите "Статическая библиотека (.lib)".

В разделе "Дополнительные параметры" снимите флажок "Предварительно скомпилированный заголовок", если он установлен. Установите флажок Пустой проект.

Нажмите «ОК», чтобы создать проект.

Чтобы создать проект статической библиотеки в Visual Studio 2015

В строке меню выберите «Файл» > «Создать» > «Проект».

В диалоговом окне "Новый проект" выберите "Установлено" > "Шаблоны" > Visual C++ > Win32. На центральной панели выберите Консольное приложение Win32.

Укажите имя проекта, например MathLibrary, в поле Имя. Укажите имя решения, например StaticMath, в поле Имя решения. Нажмите кнопку ОК.

В мастере приложений Win32 нажмите "Далее".

На странице "Параметры приложения" в разделе "Тип приложения" выберите "Статическая библиотека". В разделе «Дополнительные параметры» снимите флажок «Предварительно скомпилированный заголовок». Нажмите «Готово», чтобы создать проект.

Добавить класс в статическую библиотеку

Чтобы добавить класс в статическую библиотеку

Чтобы создать файл заголовка для нового класса, щелкните правой кнопкой мыши, чтобы открыть контекстное меню для проекта MathLibrary в обозревателе решений, а затем выберите "Добавить" > "Новый элемент".

В диалоговом окне "Добавить новый элемент" выберите Visual C++ > Код. В центральной панели выберите файл заголовка (.h). Укажите имя файла заголовка, например MathLibrary.h, а затем нажмите кнопку "Добавить". Отображается почти пустой файл заголовка.

Добавьте объявление класса Arithmetic для выполнения стандартных математических операций, таких как сложение, вычитание, умножение и деление. Код должен выглядеть следующим образом:

Чтобы создать исходный файл для нового класса, откройте контекстное меню проекта MathLibrary в обозревателе решений и выберите "Добавить" > "Новый элемент".

В диалоговом окне "Добавить новый элемент" на центральной панели выберите "Файл C++ (.cpp)". Укажите имя исходного файла, например MathLibrary.cpp, а затем нажмите кнопку "Добавить". Отображается пустой исходный файл.

Используйте этот исходный файл для реализации функций класса Arithmetic . Код должен выглядеть следующим образом:

Чтобы создать статическую библиотеку, выберите "Сборка" > "Создать решение" в строке меню. Сборка создает статическую библиотеку MathLibrary.lib, которую могут использовать другие программы.

При сборке с использованием командной строки Visual Studio необходимо выполнить сборку программы в два этапа. Сначала запустите cl /c /EHsc MathLibrary.cpp, чтобы скомпилировать код и создать объектный файл с именем MathLibrary.obj. (Команда cl вызывает компилятор Cl.exe, а параметр /c указывает компиляцию без компоновки. Дополнительные сведения см. в разделе /c (компиляция без компоновки).) Во-вторых, запустите lib MathLibrary.obj, чтобы связать код и создать статическая библиотека MathLibrary.lib. (Команда lib вызывает диспетчер библиотек, Lib.exe. Дополнительную информацию см. в справочнике по LIB.)

Создайте консольное приложение C++, которое ссылается на статическую библиотеку

Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio

В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution "StaticMath", чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».

В верхней части диалогового окна установите для фильтра Тип проекта значение Консоль.

В отфильтрованном списке типов проектов выберите «Консольное приложение», затем нажмите «Далее». На следующей странице введите MathClient в поле Имя, чтобы указать имя проекта.

Нажмите кнопку «Создать», чтобы создать клиентский проект.

После создания консольного приложения для вас создается пустая программа. Имя исходного файла совпадает с именем, которое вы выбрали ранее. В примере он называется MathClient.cpp .

Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio 2017

В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution "StaticMath", чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».

В диалоговом окне "Добавить новый проект" выберите Установлено > Visual C++ > Рабочий стол Windows. На центральной панели выберите Мастер рабочего стола Windows.

Укажите имя проекта, например MathClient, в поле Имя. Нажмите кнопку ОК.

В диалоговом окне "Проект рабочего стола Windows" в разделе "Тип приложения" выберите "Консольное приложение (.exe)".

В разделе "Дополнительные параметры" снимите флажок "Предварительно скомпилированный заголовок", если он установлен.

Нажмите «ОК», чтобы создать проект.

После создания консольного приложения для вас создается пустая программа. Имя исходного файла совпадает с именем, которое вы выбрали ранее. В примере он называется MathClient.cpp .

Чтобы создать консольное приложение C++, которое ссылается на статическую библиотеку в Visual Studio 2015

В обозревателе решений щелкните правой кнопкой мыши верхний узел Solution "StaticMath", чтобы открыть контекстное меню. Выберите «Добавить» > «Новый проект», чтобы открыть диалоговое окно «Добавить новый проект».

В диалоговом окне "Добавить новый проект" выберите Установлено > Visual C++ > Win32. На центральной панели выберите Консольное приложение Win32.

Укажите имя проекта, например MathClient, в поле Имя. Нажмите кнопку ОК.

В диалоговом окне мастера приложений Win32 нажмите "Далее".

На странице "Параметры приложения" в разделе "Тип приложения" убедитесь, что выбрано "Консольное приложение". В разделе «Дополнительные параметры» снимите флажок «Предварительно скомпилированный заголовок», затем установите флажок «Пустой проект». Нажмите «Готово», чтобы создать проект.

Чтобы добавить исходный файл в пустой проект, щелкните правой кнопкой мыши, чтобы открыть контекстное меню для проекта MathClient в обозревателе решений, а затем выберите "Добавить" > "Новый элемент".

В диалоговом окне "Добавить новый элемент" выберите Visual C++ > Код. В центральной панели выберите файл C++ (.cpp). Укажите имя исходного файла, например MathClient.cpp, а затем нажмите кнопку "Добавить". Отображается пустой исходный файл.

Используйте функциональность статической библиотеки в приложении

Чтобы использовать функции статической библиотеки в приложении

Прежде чем вы сможете использовать математические процедуры в статической библиотеке, вы должны сослаться на нее. Откройте контекстное меню проекта MathClient в обозревателе решений и выберите «Добавить» > «Ссылка».

В диалоговом окне "Добавить ссылку" перечислены библиотеки, на которые можно ссылаться. На вкладке «Проекты» перечислены проекты в текущем решении и все библиотеки, на которые они ссылаются. Откройте вкладку "Проекты", установите флажок MathLibrary и нажмите кнопку "ОК".

Чтобы сослаться на файл заголовка MathLibrary.h, необходимо изменить путь к включенным каталогам. В обозревателе решений щелкните правой кнопкой мыши MathClient, чтобы открыть контекстное меню. Выберите «Свойства», чтобы открыть диалоговое окно «Страницы свойств MathClient».

В диалоговом окне Страницы свойств MathClient выберите в раскрывающемся списке Конфигурация значение Все конфигурации. В раскрывающемся списке "Платформа" выберите "Все платформы".

Выберите страницу свойств Configuration > C/C++ > General. В свойстве Дополнительные включаемые каталоги укажите путь к каталогу MathLibrary или найдите его.

Чтобы найти путь к каталогу:

Откройте раскрывающийся список значений свойства «Дополнительные включаемые каталоги» и выберите «Изменить».

В диалоговом окне "Дополнительные включаемые каталоги" дважды щелкните верхнюю часть текстового поля. Затем нажмите кнопку с многоточием (. ) в конце строки.

В диалоговом окне "Выбор каталога" перейдите на уровень выше и выберите каталог MathLibrary. Затем нажмите кнопку «Выбрать папку», чтобы сохранить выбор.

В диалоговом окне "Дополнительные включаемые каталоги" нажмите кнопку "ОК".

В диалоговом окне "Страницы свойств" нажмите кнопку "ОК", чтобы сохранить изменения в проекте.

Зависимости в проектах C и C++ сложны. Создавать проекты C и C++ сложно, а поддерживать информацию о зависимостях внутри проектов C и C++ сложно.

Visual Studio C++ — это самая популярная интегрированная среда разработки и компилятор для платформ Microsoft Windows, широко используемая разработчиками C и C++. Очень часто разработчики вручную добавляют информацию в проект вручную в среде IDE, но этот метод трудно поддерживать с течением времени. К счастью, MSBuild, система сборки, используемая Visual Studio, позволяет определять файлы внешних пользовательских свойств (это XML-файлы), что представляет собой интересную точку расширения для автоматизации и стандартизации многих задач.

В этом сообщении представлен синтаксис Visual Studio.vcxproj и файлы свойств, а также то, как их можно использовать для систематического и масштабируемого определения зависимостей C++ от внешних библиотек.

Давайте начнем с того, что вручную добавим внешнюю библиотеку в один из существующих проектов. Давайте представим, что нам нужны некоторые возможности сжатия в нашем проекте, и мы хотим использовать для этой цели популярную библиотеку ZLib. Команда разработчиков может решить, что они поместят все свои зависимости в «C:\TeamDeps», и процесс добавления такой информации в наш проект обычно включает несколько шагов:

  • Добавление включаемых каталогов, в которых можно найти такие заголовки, как zlib.h
  • Добавление библиотек, которые необходимо связать, например zlib.lib
  • Добавление каталогов библиотек, в которых можно найти эти библиотеки
  • Добавление возможных определений препроцессора, которые могут потребоваться библиотеке для правильного поведения.

Все эти задачи можно выполнить в интерактивном режиме в среде IDE, перейдя в представление проекта, щелкните правой кнопкой мыши и откройте «Свойства». Для определения включаемых каталогов необходимо перейти в C/C++ -> Препроцессор -> Дополнительные включаемые каталоги:

Обратите внимание, что вся эта информация определяется для каждой конфигурации, в этом образе конфигурация Release — x64 изменяется. Если мы добавим каталоги include в эту конфигурацию, а затем переключимся на Debug в IDE, сборка не найдет заголовки ZLib. Поэтому необходимо добавлять включаемые каталоги, как правило, во все конфигурации.

Аналогичным образом библиотеки, которые связывает наше приложение, могут быть определены в Linker -> Input -> Additional Dependencies.

И, наконец, необходимы пути к библиотекам, это можно указать в Linker -> General. Как и указанные выше свойства, его также можно определить для нескольких конфигураций.

Этот процесс очень ручной, но мы можем проверить, как он транслируется в файлы проекта. Если мы проверим файл .vcxproj, то найдем что-то вроде этого:

Учитывая, что файлы .vcxproj являются XML-файлами, в них можно напрямую добавлять свойства. Тем не менее, файлы свойств предоставляют очень удобный способ сделать то же самое, сохраняя желаемую развязку и разделение задач в разработке программного обеспечения. Файлы свойств также представляют собой XML-файлы с расширением .props, которые в основном имеют тот же синтаксис, но могут быть импортированы из .vcxproj и даже других файлов свойств. Следуя принципу единой ответственности, мы создадим отдельные файлы свойств, предназначенные исключительно для обработки информации о зависимостях.

Для приведенного выше примера мы могли бы создать файл zlib.props, например:

И затем импортируйте его в файл .vcxproj. Этот импорт также можно добавить вручную в IDE, перейдя в «Диспетчер свойств» -> «Добавить существующий лист свойств», а затем перейдя и выбрав файл zlib.props. Но так как мы немного узнали, как выглядит .vcxproj, давайте сделаем это прямо в нем:

После того, как у нас есть эта настройка, добавить новую зависимость в проект очень просто, добавив новый файл xxxx.props и импортировав его в тот же раздел «Зависимости» в нашем .vcxproj, в одну строку.

Visual Studio C++ — это интегрированная среда разработки с несколькими конфигурациями. Это означает, что он может обрабатывать различные конфигурации сборки, такие как выпуск, отладка или архитектуры, такие как x64 или x86, в одном проекте без перезапуска, просто выбирая его в поле со списком.

Важно отметить, что в общем случае невозможно связать библиотеки, скомпилированные с другим типом сборки или архитектурой, в проект. Все библиотеки и исполняемые файлы, использующие их, должны быть собраны с одинаковым типом сборки и архитектурой. Если этого не сделать, наиболее типичной ошибкой будет ошибка ссылки, которая может выглядеть так:

Если мы хотим поддерживать и разрабатывать несколько конфигураций, как правило, для каждой конфигурации требуется как минимум отдельная библиотека. Существуют разные альтернативы, первый из которых будет использовать разные имена для библиотеки, например, zlibd.lib для отладочной, zlib.lib для выпуска и такие варианты, как zlib64d.lib для 64-битных. Второй вариант — сохранить то же имя библиотеки, но разместить ее в разных папках, например Release/x64 или Debug/Win32.

Чтобы позволить Visual Studio MSBuild использовать активные значения конфигурации, мы можем ввести условные обозначения для значений IDE «Конфигурация» и «Платформа» в нашем предыдущем файле zlib.props, например:

В зависимости от масштаба, количества зависимостей и управляемых конфигураций может быть интересно сделать еще один шаг и полностью отделить данные от функциональности. В этом случае это означало бы определить файл zlib.props, который импортирует определенный файл данных для одной конфигурации:

И каждый из файлов будет определять определенные переменные, например, zlib_release_x64.props будет:

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

Очень часто одна библиотека зависит от функциональности другой библиотеки. Например, популярный фреймворк Poco C++ зависит от ZLib (помимо других библиотек, таких как expat, sqlite и т. д.). В большинстве случаев, когда пользователь хочет создать приложение с использованием инфраструктуры Poco C++, он не хочет заботиться обо всех транзитивных зависимостях Poco и просто хочет указать в своем проекте свою зависимость от Poco, но не от другие транзитивные зависимости, такие как Zlib. Часто пользователи даже не подозревают об этих транзитивных зависимостях

Возможно реализовать эту логику в наших файлах свойств и внедрить в файл poco.props:

Обратите внимание на условие zlib_props_imported . Это флаг, который мы ввели, чтобы избежать повторного импорта одного и того же файла. Как такое могло произойти? Это то, что называется «ромбиком» на графике зависимостей. Если бы у нас была другая зависимость, такая как библиотека Boost, которая также зависит от ZLib, и мы хотим использовать в нашем проекте и Poco, и Boost, файл zlib.props был бы импортирован дважды.

Давайте на этом этапе повторим файлы, которые у нас уже есть:

  • zlib.props: точка входа для библиотеки zlib. Он содержит условную логику, основанную на «конфигурации» и «платформе» Visual IDE для выбора одного из следующих файлов. Он также реализует «защиту импорта», чтобы избежать транзитивного включения более одного раза.
  • zlib_release_x64.props : содержит конкретные данные о библиотеке zlib в ее выпуске, режиме x64, как ZLibLibraryDirectories , которые могут меняться в разных конфигурациях.
  • zlib_debug_x64.props: то же, что и предыдущий, но для конфигурации отладки. Возможны и другие файлы конфигурации.
  • poco.props : точка входа в библиотеку poco. Именно этот файл пользователи будут включать в свои файлы проектов .vcxproj. Он содержит транзитивную зависимость от zlib.props .
  • poco_release_x64.props: специальные данные для библиотеки poco для выпуска, конфигурация x64.
  • … другие файлы для каждой транзитивной зависимости и для каждой конфигурации.

Теперь, когда зависимости хорошо структурированы, у нас есть необходимая инфраструктура для дальнейшей автоматизации процесса. Это может быть очень полезно в нескольких случаях, например, при развитии зависимостей. Многим командам необходимо работать с несколькими проектами и разными версиями своих библиотек C++. Было бы относительно просто определить такой макет, как C:\TeamDeps\zlib\1.2.11 и C:\TeamDeps\zlib\1.2.8 . Каждый проект может определять свои версии и иметь некоторый сценарий для автоматизации создания различных файлов свойств.

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

Наличие этой автоматизации было бы очень удобно для разработчиков, работающих над разными проектами, или для агентов сборки CI, которым нужна какая-то изоляция, а затем требуется использовать другой C:\TeamDeps для разных задач.

В этом репозитории Github есть проект C++ для Visual Studio 16 2019, реализующий приложение, которое может загружать изображение из Интернета, используя некоторые функции из библиотеки Poco, обрабатывать его с помощью библиотеки OpenCV и отображать с помощью графического интерфейса ImGui. пользовательский интерфейс, визуализирующий его с помощью GLFW. Все эти библиотеки, в свою очередь, имеют несколько транзитивных зависимостей.

Мы могли бы вручную загрузить их и собрать из исходников, поместить в папку, например, «C:\TeamDeps», а затем записать файлы свойств. Менеджер пакетов Conan C++ может автоматизировать это для нас, управляя загрузкой пакетов из центрального репозитория пакетов с открытым исходным кодом ConanCenter, установкой их в кэш Conan, чтобы они никоим образом не загрязняли и не изменяли систему, и, наконец, используя Генератор MSBuildDeps автоматически генерирует из графа зависимостей все файлы свойств для нашего проекта.

Первым шагом является установка зависимостей (прочитайте файл conanfile.py, если хотите проверить, как там указаны версии зависимостей):

Эта команда загрузит и установит все наши зависимости из ConanCenter и транзитивные зависимости (27 из них). Граф зависимостей можно создать с помощью $ conan info .. --graph=graph.html, а затем открыть файл graph.html:

После команды $conan install перейдите в папку conan и проверьте там все сгенерированные файлы .props.

После того, как зависимости установлены и файлы свойств добавлены в проект (это нужно сделать только один раз, проект в репозитории Github уже добавил файлы свойств, ничего делать не нужно), можно построить и запустить проект. Не забудьте выбрать «Release» и «x64», так как это конфигурация по умолчанию, которая будет установлена с помощью conan install.

Использование файлов свойств — это удобный и структурированный способ управления информацией о зависимостях в проектах Visual Studio C++. Они могут быть очень систематически организованы для масштабирования до любого количества зависимостей, управления транзитивными зависимостями и несколькими конфигурациями (выпуск/отладка, x64/x86).

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