CMake+VCPKG
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.01.26 16:35
Оценка:
Здравствуйте!

Кто их вместе использует? Пользуете стандартным способом?

Это ж надо самому указывать тулчейн-файл vcpkg.cmake (перед этим найдя его в батнике или .sh), задавать triplet, потом, если есть ещё какой-то тулчейн файл, то делать цепочку.

Как-то много возни.

Я хочу так: просто включаешь в свой проект какой-то свой .cmake/vcpkg.cmake, он сам всё определяет, какой хост, какой таргет, формирует triplet, находит, где лежит VCPKG-шный vcpkg.cmake, и подключает его.

Никто так не делал?

Есть подводные камни?

Когда подключать такой свой детектор?

Тулчайн файлы отрабатывают обычно до директивы project, но делать какие-то подключения своих файлов до project как-то не очень красиво. Могут быть проблемы, если я свой детектор VCPKG буду после project подключать?
Маньяк Робокряк колесит по городу
Re: CMake+VCPKG
От: SaZ  
Дата: 01.02.26 14:19
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!


M>Кто их вместе использует? Пользуете стандартным способом?


Да, уже лет 5.

M>Это ж надо самому указывать тулчейн-файл vcpkg.cmake (перед этим найдя его в батнике или .sh), задавать triplet, потом, если есть ещё какой-то тулчейн файл, то делать цепочку.

M>Как-то много возни.

Ну надо же как-то вашей билд системе знать где брать зависимости? Или через аргумент для cmake, или через переменные окружения. Оба способа — правильные.

M>Я хочу так: просто включаешь в свой проект какой-то свой .cmake/vcpkg.cmake, он сам всё определяет, какой хост, какой таргет, формирует triplet, находит, где лежит VCPKG-шный vcpkg.cmake, и подключает его.

M>Никто так не делал?
M>Есть подводные камни?

Я предпочитаю собирать все зависимости в отдельную папку и скармливать её через CMAKE_PREFIX_PATH, чтобы в самом проекте не было вообще никаких упоминаний пакетных менеджеров, а лишь голый cmake.
Подводные камни — это обновление зависимостей, иногда приходится делать полную пересборку всего. У меня в проекте примерно так:

vcpkg_args=(install)
vcpkg_args+=(--triplet="${vcpkg_triplet}")
vcpkg_args+=(--x-install-root="${temp_dir}")
vcpkg_args+=(--overlay-ports="${vcpkg_ports}")
"$vcpkg_root/vcpkg" "${vcpkg_args[@]}"
cp -n -r "${temp_dir}/${vcpkg_triplet}" "${thirdparty_dir}"


На входе vcpkg.json в текущей папке. На выходе в thirdparty_dir будет одна папка, которую я подключаю через CMAKE_PREFIX_PATH.

M>Когда подключать такой свой детектор?

M>Тулчайн файлы отрабатывают обычно до директивы project, но делать какие-то подключения своих файлов до project как-то не очень красиво. Могут быть проблемы, если я свой детектор VCPKG буду после project подключать?

До project(), это нормально, я так раньше делал но отказался, когда перешёл на вышеописанный способ.
Re[2]: CMake+VCPKG
От: alsemm Россия  
Дата: 23.02.26 21:34
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Или через аргумент для cmake, или через переменные окружения. Оба способа — правильные.

Конфигурция билда через переменные окружения — это как глобальные переменные в коде, только хуже.
Прямая дорога к тому, что у каждого человека все будет собираться по своему и ломаться по своему.
Починить сломавшийся билд из-за того, что одну переменную окружения поменяли на другие две, станет в какой-то момент невозможно из-за обилия переменных.
Отредактировано 23.02.2026 21:35 alsemm . Предыдущая версия .
Re[3]: CMake+VCPKG
От: SaZ  
Дата: 26.02.26 12:42
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Здравствуйте, SaZ, Вы писали:


SaZ>>Или через аргумент для cmake, или через переменные окружения. Оба способа — правильные.

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

Понятно, что это не лучший вариант. Но крайне простой и удобный. И да — я не прошу переменные окружения прописывать глобально, достаточно чтобы они жили в рамках первичного запуска настроечного скрипта. Например, при сборке некоторых кривых зависимостей через vcpkg нет штатной возможности принудительно указать компилятор. Приходится выставлять его через переменные окружения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.