Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用

Posted

技术标签:

【中文标题】Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用【英文标题】:Visual Studio 2019: build C++ from command line with vcvars64.bat doesn't work anymore 【发布时间】:2020-01-09 18:33:50 【问题描述】:

为了在以前版本的 Visual Studio 的命令行中使用 cl cpp 编译器编译应用程序,我运行了 vcvars64.bat 脚本,然后编译器按预期工作。

我最近安装了 Visual Studio 2019。我在以下位置找到了 vcvar64.bat 脚本:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build

但是运行这个脚本并不能使 cl 编译器工作。即使是简单的 3 行 cpp 文件也无法编译,并出现诸如“stddef.h”文件未找到之类的愚蠢错误。如果您在 IDE 中使用它,编译器会按预期工作。

你需要做什么才能让VS2019 cpp编译器在命令行中工作?

【问题讨论】:

试试"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64(抱歉格式化,从我使用的脚本中获取) @ChrisMM vcvars64.bat 只是调用vcvarsall.bat" x64 所以应该是等价的 @AlanBirtles,啊,是的,你是对的。没有看.bat 文件做了什么。我的脚本直接使用vcvarsall.bat 一些事情要尝试:您可以从开始菜单运行命令提示符链接之一。运行 vcvars64.bat 后,您可以在命令提示符中检查 INCLUDE 环境变量。检查您的 VS 安装以验证您是否安装了 C++ 工具的正确部分。 这里有什么消息吗?得到同样的错误。 vcvarsall.bat 和开发人员提示不会检测到 Windows 套件。尝试添加包含时,它一直有效,直到链接器搜索要链接的库,例如ole32.lib。链接器找不到它们。似乎脚本有问题和/或安装程序以某种方式更改。 【参考方案1】:

在我的 Visual Studio 2019 安装中,stddef.h 位于 C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrtvcvars.bat 应该将此路径添加到 INCLUDE 环境变量中。

运行以下命令可能会提供一些提示:

set VSCMD_DEBUG=3
vcvars64.bat > out.txt

在我的安装中,在 out.txt 中搜索 call :GetWin10SdkDir 会到达 bat 文件正在搜索 SDK 目录的部分。希望那里会有一些错误消息。

作为参考,这些是通过在我的机器上调用 vcvars64.bat 设置的附加环境变量:

CommandPromptType=Native
DevEnvDir=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\
ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs
Framework40Version=v4.0
FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework64\
FrameworkDIR64=C:\WINDOWS\Microsoft.NET\Framework64
FrameworkVersion=v4.0.30319
FrameworkVersion64=v4.0.30319
htmlHelpDir=C:\Program Files (x86)\HTML Help Workshop
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\Tools\MSVC\14.24.28314\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt
LIB=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\ATLMFC\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x64;
LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\ATLMFC\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17763.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;
NETFXSDKDir=C:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\
Path=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\VC\VCPackages;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Team Tools\Performance Tools\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Team Tools\Performance Tools;C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common\VSPerfCollectionTools\vs2019\\x64;C:\Program Files (x86)\Microsoft Visual Studio\VS15Preview\Common\VSPerfCollectionTools\vs2019\;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64;C:\Program Files (x86)\Windows Kits\10\bin\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\\MSBuild\Current\Bin;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\;
Platform=x64
UCRTVersion=10.0.17763.0
UniversalCRTSdkDir=C:\Program Files (x86)\Windows Kits\10\
VCIDEInstallDir=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\VC\
VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\
VCToolsInstallDir=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.24.28314\
VCToolsRedistDir=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Redist\MSVC\14.24.28127\
VCToolsVersion=14.24.28314
VisualStudioVersion=16.0
VS160COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\Tools\
VSCMD_ARG_app_plat=Desktop
VSCMD_ARG_HOST_ARCH=x64
VSCMD_ARG_TGT_ARCH=x64
VSCMD_VER=16.4.2
VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\
WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17763.0;C:\Program Files (x86)\Windows Kits\10\References\10.0.17763.0
WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
WindowsSDKLibVersion=10.0.17763.0\
WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\
WindowsSDKVersion=10.0.17763.0\
WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\
WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\
__DOTNET_ADD_64BIT=1
__DOTNET_PREFERRED_BITNESS=64

如果所有其他方法都失败,重新安装 Visual Studio 可能会解决问题。

【讨论】:

【参考方案2】:

首先,您应该安装 Visual Studio 和可选的具有 C++ 工作负载的桌面开发,或 Visual Studio 的命令行构建工具。

在您可以在命令行上构建 C 或 C++ 程序之前,您必须 验证工具是否已安装,并且您可以从 命令行。 Visual C++ 有复杂的要求 命令行环境来查找它的工具、头文件和库 用途。您不能在普通命令提示符窗口中使用 Visual C++ 没有做一些准备。幸运的是,Visual C++ 安装 用于启动开发人员命令提示符的快捷方式,该命令提示符 为命令行构建设置的环境。不幸的是,名字 开发人员命令提示符快捷方式及其所在位置 几乎每个版本的 Visual C++ 和不同的 Windows 版本。

开发人员命令提示符快捷方式会自动设置正确的 编译器和工具的路径,以及任何所需的头文件和 图书馆。如果您使用 常规命令提示符窗口。

如果您在运行 cl 命令时收到“'cl' 不是内部或外部命令、可运行程序或批处理文件”、错误 C1034 或错误 LNK1104 等错误,则说明您没有使用开发人员命令提示符,或者您的 Visual C++ 安装有问题。

我建议你可以尝试直接使用Developer Command Prompt for VS。请打开开始菜单并选择所有应用程序。向下滚动并打开 Visual Studio 文件夹(不是 Visual Studio 应用程序)。选择 Developer Command Prompt for VS 打开命令提示符窗口。

更多细节我建议你可以参考DOC:Walkthrough: Compiling a Native C++ Program on the Command Line

【讨论】:

不要认为这些建议是相关的。他说他遇到了包含错误,所以cl 必须运行。运行Developer Command Prompt for VS 只是vcvarsall.bat 的快捷方式。

以上是关于Visual Studio 2019:使用 vcvars64.bat 从命令行构建 C++ 不再起作用的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题

Visual Studio 2017工程在Visual Studio 2019打开碰到的问题

使用Visual Studio 2019--调试汇编代码

无法在 Visual Studio 2019 中使用诊断工具

Visual Studio 2019 使用 Live Share

visual studio2019过期了怎么办