Задайте вопрос: как использовать vcpkg для автоматической установки зависимостей?

Я работаю над проектом C ++ на машине Linux, и он использует несколько библиотек повышения. Я установил их в своей системе с помощью vcpkg и собрал их с помощью набора инструментов, предоставленного vcpkg. У меня вопрос: как мне определить зависимости, чтобы они автоматически устанавливались в другой системе, если бы они ее собирали? У Конана есть способ сделать это, определив зависимости в conanfile.txt. Как мне сделать то же самое с vcpkg?

Edit1: я нашел autovcpkg, который выполняет ту работу, которую я ищу, но может ли то же самое быть сделано изначально внутри cmakelists.txt или самим vcpkg?


person aks    schedule 03.04.2020    source источник
comment
AFAIK нет встроенного способа сделать это через CMake. Хотя autovcpkg кажется подходящим вариантом. Он делает то, что вам нужно было бы делать вручную через cmake за вас.   -  person Developer Paul    schedule 03.04.2020
comment
Спасибо, что дали мне знать. Существует ли PR или проблема в vcpkg для следующей функции?   -  person aks    schedule 03.04.2020
comment
вы имеете в виду автоматическую сборку зависимостей? Нет, я думаю, что это выходит за рамки того, что пытается сделать vcpkg. Лучшее, что вы можете сделать в настоящее время (если вы работаете в Windows), - это использовать команду vcpkg integration, чтобы сделать библиотеки доступными глобально в вашей системе, но я чувствую, что это нарушает идею использования cmake, поскольку он предназначен для кроссплатформенности.   -  person Developer Paul    schedule 04.04.2020
comment
Я хотел что-то похожее на то, что делает Конан в conanfile.txt.   -  person aks    schedule 04.04.2020


Ответы (2)


Я нашел autovcpkg, который выполняет ту работу, которую я ищу, но можно ли сделать то же самое внутри cmakelists.txt или с помощью самого vcpkg?

Вы можете написать порт vcpkg для своей библиотеки или исполняемого файла, предоставив файлы CONTROL и portfile.cmake. В файле CONTROL вы определяете все зависимости и возможные функции, в то время как файл порта содержит инструкции по сборке. Вы можете использовать vcpkg create <myport> <url> <filename> для создания CONTROL и portfile.cmake из шаблона, который можно настроить в соответствии с вашими потребностями. Вместе с наложением портов этот порт также может использоваться другими пользователями без объединения в vcpkg / master.

person Alexander Neumann    schedule 09.04.2020
comment
Не могли бы вы предоставить ссылки на документацию о том, как это сделать? - person jvh; 29.10.2020

Если у вас есть vcpkg в качестве подмодуля для вашего проекта, определите манифест для библиотек, которые вы хотите создать с помощью vcpkg, и которые используют набор инструментов vcpkg CMake - тогда вы получите все, что захотите.

  1. Добавление vcpkg в качестве подмодуля означает, что вашим пользователям не нужно устанавливать его самостоятельно, набор инструментов CMake установит его от вашего имени. Это также означает, что вы можете исправить версии пакета
  2. Использование файла манифеста - это то, как вы программно указываете vcpkg, какие пакеты нужно получить и собрать на этапе настройки CMake.
  3. Использование файла инструментальной цепочки CMake - единственный способ связать это с системой сборки вашего проекта.
$ git clone .../my_project
$ cd ./my_project
$ git submodule update --init
$ mkdir ../build
$ cd ../build
$ cmake ../my_project
-- Running vcpkg install
-- Running vcpkg install - done
...
person cmannett85    schedule 02.07.2021