Sam*_* Gu 4 c c++ visual-studio-code
我正在使用带有 VS Code 的 vscode-cpptools 扩展的 Visual Studio 工具链,但出现以下错误:
仅当从 VS 的开发人员命令提示符运行 VS Code 时,cl.exe 构建和调试才可用。
错误的原因是什么以及如何解决?
阅读有关为 Microsoft C++ 配置 VS Code 的文档。
在显示以下错误的屏幕截图下找到以下摘录:
“cl.exe 构建和调试仅在从 VS 开发人员命令提示符运行 VS Code 时可用。”
如果尝试使用 cl.exe 生成和调试时出现错误,请确保已使用
code .快捷方式从 Visual Studio 的开发人员命令提示符启动 VS Code。
Visual Studio 构建工具的每个版本都附带开发人员提示,用于设置使用该版本工具的环境。例如,它将目录放入其环境中PATH,以便可以轻松访问它们。使用 Visual Studio 构建工具的配置中的一些其他工具(例如 VS Code)可能期望从该环境运行。
https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line#how-to-use-the-command-line-tools中有一些很好的相关信息:
为了正常工作,这些工具需要设置几个特定的环境变量。这些变量用于将工具添加到路径,并设置包含文件、库文件和 SDK 的位置。为了方便设置这些环境变量,安装程序会在安装过程中创建自定义命令文件或批处理文件。您可以运行这些命令文件之一来设置特定的主机和目标构建架构、Windows SDK 版本和平台工具集。为了方便起见,安装程序还在您的“开始”菜单中创建快捷方式。这些快捷方式通过将这些命令文件用于主机和目标的特定组合来打开开发人员命令提示符窗口。这些快捷方式可确保所有必需的环境变量均已设置并可供使用。
所需的环境变量特定于您的安装和您选择的构建架构。它们也可能因产品更新或升级而改变。这种可变性是我们建议您使用已安装的命令提示符快捷方式或命令文件,而不是自己设置环境变量的原因之一。
启动 VS Code 时执行此操作可能会很痛苦,但如果您安装了多个 Visual Studio 并且想要使用特定的构建工具在 VS Code 中进行开发,我不知道如何改进这一点。
如果您不关心整个 VS Code 进程从 VS 开发人员提示符的环境开始,并且您只关心在tasks.json 中定义的构建任务是否有效,并且您可以硬编码特定的任务工作区的开发人员提示环境,您可以按照https://code.visualstudio.com/docs/cpp/config-msvc#_run-vs-code-outside-the-developer-command-prompt中的说明进行操作。请阅读文档以获取完整信息和注意事项,但长话短说,请在tasks.json 的顶层添加类似以下内容(根据需要进行调整):
Run Code Online (Sandbox Code Playgroud)"windows": { "options": { "shell": { "executable": "cmd.exe", "args": [ "/C", // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed. "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"", "&&" ] } } },
您还可以尝试其他技巧。请参阅https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line#developer_command_file_locations,其中提供了可用于修改现有环境的命令文件的位置命令提示符,而不是使用预构建的开发人员命令提示符之一。例如,编写一个脚本文件,仅运行这些命令文件之一来设置选定的开发人员环境,然后运行code,将其余命令行参数传递给code。然后,您可以将该脚本文件固定到某个易于访问的位置,或通过命令行使用它。例如,请参阅通过上下文菜单从开发控制台运行 VScode。
请注意,如果您使用的是 CMake,则 CMake 工具扩展具有“套件”功能(另请参阅使用 VS Code cmake-tools 扩展在我的 Windows 计算机上扫描的套件有何区别?)并支持 CMake 预设,两者都有处理此类内容的机制(对于预设,请参阅配置预设的“架构”和“工具集”属性)。