当我手动安装vcpkg的时候爆出warning提示这个与环境变量中的VCPKG_ROOT的路径不匹配。
当然看起来只是warning也不一定会给项目造成什么问题。但是我还是不习惯于坐视不理。打开cmd,输入set命令,可以看到
然而环境变量里并没有这个VCPKG_ROOT这个变量,我手动设置也没法覆盖掉,但是网上说这是临时的,只有在环境变量可以看到的才是永久的。那么我推测它是由某个程序搞出来的,当我在环境变量里设置VCPKG_ROOT的时候给我的值覆盖掉了。那么既然set打印的都是环境变量,我就把环境变量全删了不就好了?最起码会少一些吧,不会有我这么多看不懂的吧!所以我把环境变量删了很多很多。但是大家不要学我。后来我是用二分法找到的根源。二分法很好办就是把那些看起来可疑的环境变量改一下,后面加个1
然而搞笑的是最不可疑是windir只有当我把它变成windir1的时候才不会有VCPKG_ROOT这个环境变量的值。其它的可以改回来了。那么程序是怎么加载注册表,注册又是被什么程序加载的呢?
看我的上一篇可以知道。系统的程序会加载注册表,而vcpkg一眼看去就是微软开发的,所以微软有活可以加载到 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg这个文件夹(这里有vcpkg)。当我们在运行程序的时候(当成是set命令)可以把我们自己定义的VCPKG_ROOT覆盖掉,当是当前的环境。简单的说是有程序通过windir这个变量给VCPKG_ROOT赋值当我们在编译的时候。那么他一定是自己找到的 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg,如果找不到会不会自定义一个其它文件夹?比如我把vcpkg的文件名改为vcpkg1会不会把VCPKG_ROOT重新定义为C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg1?显然不会的,VCPKG_ROOT的定义一定是有判定条件的,这个条件一定与文件夹vcpkg的名称是vcpkg是与的关系,只有文件夹vcpkg的名称是vcpkg的时候VCPKG_ROOT才会被定义。否则我写什么都行了。所以把vcpkg的文件夹名改为vcpkg1那个程序就找不到了就不会给VCPKG_ROOT赋值了。再在安装目录运行vcpkg.exe list就不会有那warning了