MSBuild 2019忽略INCLUDE环境变量。

3
我正在使用两台安装了Visual Studio 2019的机器,其中一台安装了Community版本,另一台安装了Pro版本。然而,Pro版本的MSBuild完全忽略了INCLUDE环境变量,因此我正在构建的项目(ICU)找不到stddef.h文件。虽然 Windows Kits 10 ucrt 目录已包含在INCLUDE环境变量中,但该文件仍未被找到。
相比之下,Community版本没有遇到这个问题。
当我使用 /v:diag 选项构建项目时,我可以看到INCLUDE环境变量中定义的大部分内容被添加到名为CAExcludePath的变量中。
以下是INCLUDE环境变量:INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include;;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;;;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\UnitTest\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt;; 以下是CAExcludePath:CAExcludePath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\atlmfc\include;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt;;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt;; 为什么会出现这种情况,如何避免?

你是否按照这个文档安装了Windows Kits工具?通常情况下,你应该在VS IDE中设置这些路径,而不是环境变量。在我的电脑上,当我按照安装程序中的步骤完成了最后一步安装Windows Driver Kit后,我可以直接在代码中使用它,因为它已经自动包含到“Include Directories”中。 - Mr Qian
我在Visual Studio安装程序中安装了必要的工具包。这就是为什么它们被添加到本机工具命令提示符的INCLUDE路径中(请参见我发布的Kit目录中的INCLUDE env var)。但是,我没有安装Windows Driver Kit。ICU项目不需要它。但是,如果WDK改变了VS的行为,使其不再忽略INCLUDE变量,那么我会尝试一下。 - Zdenik
2个回答

3

MSBuild 2019忽略INCLUDE环境变量

我认为您不应该将这些路径设置到环境变量中。对于C++项目,VS默认情况下不识别系统环境变量中的库路径,这不是VS的工作。

通常,您应该在VS IDE中设置额外的库路径。右键单击您的项目-->属性-->配置属性-->VC++目录-->包含目录属性-->配置属性-->C/C++-->附加包含目录。您可以参考this official document

但是,当我安装Windows Kits工具时,默认情况下会将此路径包含在包含路径中,您可以直接在代码中使用它。请参见以下内容:

enter image description here

很抱歉,您在安装Windows Kits工具时遇到了问题。请按照此文档安装正确的工具,并在完成安装之前,在Visual Studio 2019中安装相关扩展,这是安装程序中的最后一步,用于集成该工具。
我认为在安装扩展时,这些路径将自动包含在VS中,您可以直接使用它们。

enter image description here

此外,如果您不想安装此扩展,您可以按照我上面提到的步骤手动添加包含路径。

如果您已经完成了这些步骤,但仍然遇到相同的错误,我认为您应该检查您的环境并遵循以下建议:

1) 关闭VS实例,删除.vsbinobj文件夹,重新打开项目,然后再次构建

2) 在VS安装程序中执行修复操作

3) 如果您的VS不是最新版本,请更新您的VS,并同时不要忘记更新操作系统。

希望这些能有所帮助。


1
这样说还是有用的,因为你说“默认情况下,VS不识别系统环境变量中的库路径”。但是为什么VS社区版本会识别它们呢?在我看来,这种行为应该是一致且可配置的。我的问题最终是:如何配置VS以便它不忽略INCLUDE环境变量的值?我可以在每个系统上调整ICU项目文件,但那并不理想。应该能够只需使用本地开发人员命令提示符(它会将工具包添加到INCLUDE路径中)从命令行运行MSBuild,然后就应该可以工作了。 - Zdenik
1
我想再次强调,使用本机工具命令提示符从MSBuild构建确实可以在社区版中使用。因此,我只是试图找出如何让专业版做同样的事情(配置它以便不忽略INCLUDE环境变量中的路径)。 - Zdenik
请在Pro版中打开开发人员命令提示符,然后输入echo %INCLUDE%,您能看到这些路径吗?如果没有,请检查您的VS环境是否存在错误。请按照我上面说的进行一些修复。 - Mr Qian
1
我从原始帖子中得到了INCLUDE=...部分,就是这样做的。开发人员命令提示符设置的INCLUDE环境变量中的路径是正确的。路径存在并包含正确的文件。来自VS Pro的MSBuild拒绝使用它们。 - Zdenik
我试图在MSVC上编译Ruby:添加了额外的目录,安装了所有可用的驱动程序包,进行了VS修复并重新启动虚拟机,但都没有帮助。这是Windows系统,没有任何方法可以帮助解决问题,只有通过反汇编和重新组装才能允许使用小的"INCLUDE"变量... - puchu
显示剩余2条评论

1
请使用环境变量IncludePath代替。
set IncludePath=%INCLUDE%

IncludePath 在运行 msbuild 时不会被忽略或覆盖,通过设置它,我成功地编译了我的项目/解决方案。

在我的计算机上,设置 IncludePath 覆盖了原本会被设置的三个路径。这三个路径在我的 %INCLUDE% 路径中有类似(相同的头文件但针对不同版本)的对应项,因此忽略/清除/排除这些路径看起来是安全的(实际上也很明智)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接