Установка VCPKG с последующим вызовом «vcpkg install» приводит к «Не удалось изменить рабочий каталог» - PullRequest
0 голосов
/ 10 июля 2019

Когда я следую инструкциям на странице документации VCPKG для установки в Windows, отмеченные шаги не выполняются в строке .\bootstrap-vcpkg.bat.

В частности, это шаги, которые я следую, в точности в соответствии с инструкциями по ссылке выше.

  • Запустить Powershell (не как администратор)
  • cd <parent_directory>
  • git clone https://github.com/Microsoft/vcpkg.git
  • cd .\vcpkg\
  • .\bootstrap-vcpkg.bat
  • .\vcpkg integrate install

Все вышеперечисленные шаги (кажется, выполняются) до последнего (красным, внизу).

Я вижу следующий вывод:

(Примечание: на снимке экрана также показана дополнительная строка в конце - в которой я попытался установить желаемый пакет для использования в проекте - который не удался с той же ошибкой.)

Я просмотрел исходный код vcpkg и обнаружил, что некорректная строка кода выглядит следующим образом (vcpkg.cpp):

enter image description here

Изменение источника vcpkg.cpp для отображения отсутствующего пути, перестроение и тестирование показывают, что отсутствующий каталог:

<vcpkg>/installed/...

... Но каталог installed не существует в корневом каталоге vcpkg.

Поскольку я следую основным инструкциям по установке из документации vcpkg, я озадачен тем, что я делаю неправильно, что не так в моей настройке или что с этим делать.

Может кто-нибудь объяснить, почему установка VCPKG с последующим вызовом vcpkg install приводит к ошибке Changing the working dir failed?

1 Ответ

0 голосов
/ 11 июля 2019

Я ошибочно определил переменную среды VCPKG_ROOT для каталога, который является подкаталогом корневого каталога проекта vcpkg.

Это простая ошибка, которую можно сделать, как я опишу ниже.


Исполняемый файл vcpkg сам проверяет наличие переменной среды VCPKG_ROOT и, если присутствует, использует ее значение для переопределения пути к корневой папке дляvcpkg проект, который используется внутренне запущенным двоичным файлом vcpkg.

Я создал переменную среды с тем же именем (VCPKG_ROOT) для другой цели - так, чтобы моё собственное нижестоящее приложение могло быть предоставленопуть к файлам include для библиотеки , установленной по vcpkg.Имеет смысл выбрать имя VCPKG_ROOT, поскольку на самом деле vcpkg по умолчанию устанавливает библиотеки в подкаталог своего корневого каталога.

В частности:

  • Если корневым каталогом проекта 'vcpkg' является <vcpkg> ...
  • ..., то по умолчанию исполняемый файл vcpkg устанавливает библиотеки так, что размещаются пути включения для установленных библиотек.в <vcpkg>\installed\...\include\

(и другие библиотечные файлы, такие как двоичные файлы, также помещаются в каталоги, вложенные в <vcpkg>.)

Проблема заключалась в том, что я определил VCPKG_ROOTбыть второй пулей, а не первой.Поэтому сделать ошибку легко, учитывая, что выбор имени "VCPKG_ROOT" имеет смысл в обоих сценариях!

Я только что предложил улучшенное сообщение об ошибке через запрос на получение vcpkg проект - если его принять, это может спасти другую бедную душу от стресса и потерять время на поиск этого сбоя.

...