安装VCPKG后再调用“ vcpkg install”会导致“更改工作目录失败”

时间:2019-07-10 18:06:06

标签: visual-studio vcpkg

当我按照the VCPKG documentation page中的步骤在Windows上安装时,上述步骤在行.\bootstrap-vcpkg.bat上失败。

具体来说,正是我按照上面链接中的说明执行的步骤。

  • 运行Powershell(不是管理员)
  • cd <parent_directory>
  • git clone https://github.com/Microsoft/vcpkg.git
  • cd .\vcpkg\
  • .\bootstrap-vcpkg.bat
  • .\vcpkg integrate install

上述所有步骤(似乎)都将成功,直到最后一个步骤(下面用红色表示)。

我看到以下输出:

"Changing the working dir failed"

(注意:屏幕快照还在末尾显示了另一行-我尝试安装所需的软件包以在项目中使用-失败并出现相同的错误。)

我浏览了vcpkg的源代码,发现令人反感的代码行看起来像这样(vcpkg.cpp):

enter image description here

修改vcpkg.cpp源以显示缺少的路径,重建和测试表明缺少的目录为:

  

<vcpkg>/installed/...

...但是installed根目录中不存在vcpkg目录。

因为我遵循vcpkg文档中的基本安装说明,所以我对自己做错了什么,设置中有什么问题或如何处理感到困惑。

有人可以解释为什么安装VCPKG后再调用“ vcpkg install”会导致错误Changing the working dir failed吗?

1 个答案:

答案 0 :(得分:0)

我将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提出了一条改进的错误消息-如果被接受,这可以为其他可怜的灵魂省去追踪此故障的压力和时间。