安装 VCPKG 后调用 "vcpkg install" 会导致 "Changing the working dir failed"
Installation of VCPKG followed by any call to "vcpkg install" results in "Changing the working dir failed"
当我按照 the VCPKG documentation page 中的步骤在 Windows 上安装时,上述步骤在 .\bootstrap-vcpkg.bat
.
行失败
具体来说,就是我按照上面link.
上的说明进行的步骤
- 运行 Powershell(非管理员身份)
cd <parent_directory>
git clone https://github.com/Microsoft/vcpkg.git
cd .\vcpkg\
.\bootstrap-vcpkg.bat
.\vcpkg integrate install
以上所有步骤(似乎)都成功了,直到最后一步(下图红色部分)。
我看到以下输出:
(注意:屏幕截图还在末尾显示了额外的一行 - 我在其中尝试安装所需的包以用于项目 - 但由于相同的错误而失败。)
我查看了 vcpkg
的源代码,发现有问题的代码行如下所示 (vcpkg.cpp
):
修改vcpkg.cpp
源显示缺失路径,重建,测试发现缺失目录为:
<vcpkg>/installed/...
...但是vcpkg
根目录下不存在installed
目录
因为我是按照 vcpkg
文档中的基本安装说明进行操作的,所以我不知道自己做错了什么,我的设置有什么问题,或者该怎么办。
有人可以解释为什么安装 VCPKG 后调用 "vcpkg install" 会导致错误 Changing the working dir failed
吗?
我错误地将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
”的选择在两种情况下都有意义!
我刚刚通过 pull request to the vcpkg
project 建议了一个改进的错误消息 - 如果被接受,这可能会为其他一些可怜的灵魂节省压力和浪费时间来追踪这个故障。
当我按照 the VCPKG documentation page 中的步骤在 Windows 上安装时,上述步骤在 .\bootstrap-vcpkg.bat
.
具体来说,就是我按照上面link.
上的说明进行的步骤- 运行 Powershell(非管理员身份)
cd <parent_directory>
git clone https://github.com/Microsoft/vcpkg.git
cd .\vcpkg\
.\bootstrap-vcpkg.bat
.\vcpkg integrate install
以上所有步骤(似乎)都成功了,直到最后一步(下图红色部分)。
我看到以下输出:
(注意:屏幕截图还在末尾显示了额外的一行 - 我在其中尝试安装所需的包以用于项目 - 但由于相同的错误而失败。)
我查看了 vcpkg
的源代码,发现有问题的代码行如下所示 (vcpkg.cpp
):
修改vcpkg.cpp
源显示缺失路径,重建,测试发现缺失目录为:
<vcpkg>/installed/...
...但是vcpkg
根目录下不存在installed
目录
因为我是按照 vcpkg
文档中的基本安装说明进行操作的,所以我不知道自己做错了什么,我的设置有什么问题,或者该怎么办。
有人可以解释为什么安装 VCPKG 后调用 "vcpkg install" 会导致错误 Changing the working dir failed
吗?
我错误地将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
”的选择在两种情况下都有意义!
我刚刚通过 pull request to the vcpkg
project 建议了一个改进的错误消息 - 如果被接受,这可能会为其他一些可怜的灵魂节省压力和浪费时间来追踪这个故障。