[英]Why Visual Studio doesn't install vcvarsall.bat and DIA SDK
[英]How to make visual studio code run vcvarsx86_arm64.bat instead of vcvarsall.bat directly?
我試圖使用 VSC 使用 MSVC 構建我的 C++ 程序。 我曾經通過執行 vcvarsx86_arm64.bat 然后使用命令來做到這一點。
cl /EHsc /Z7 /W4 /Fe: ${fileDirname}.exe *.cpp
這工作得很好。 但我確實想嘗試以 VSC 的方式來做。 我檢查了 Microsoft 文檔並構建了 c_cpp_properties 如下。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.18362.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.23.28105/bin/Hostx64/x64/cl.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
我使用以下構建任務進行測試:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "cl.exe build active file",
"command": "echo hi",
"group": "build"
}
]
}
這是我收到的錯誤消息
> Executing task: echo hi <
[ERROR:vcvarsall.bat] Invalid argument found : /d
[ERROR:vcvarsall.bat] Invalid argument found : /c
[ERROR:vcvarsall.bat] Invalid argument found : echo
[ERROR:vcvarsall.bat] Invalid argument found : hi
[ERROR:vcvarsall.bat] Error in script usage. The correct usage is:
Syntax:
vcvarsall.bat [arch] [platform_type] [winsdk_version] [-vcvars_ver=vc_version] [-vcvars_spectre_libs=spectre_mode]
where :
[arch]: x86 | amd64 | x86_amd64 | x86_arm | x86_arm64 | amd64_x86 | amd64_arm | amd64_arm64
[platform_type]: {empty} | store | uwp
[winsdk_version] : full Windows 10 SDK number (e.g. 10.0.10240.0) or "8.1" to use the Windows 8.1 SDK.
[vc_version] : {none} for latest installed VC++ compiler toolset |
"14.0" for VC++ 2015 Compiler Toolset |
"14.xx" for the latest 14.xx.yyyyy toolset installed (e.g. "14.11") |
"14.xx.yyyyy" for a specific full version number (e.g. "14.11.25503")
[spectre_mode] : {none} for libraries without spectre mitigations |
"spectre" for libraries with spectre mitigations
The store parameter sets environment variables to support Universal Windows Platform application
development and is an alias for 'uwp'.
For example:
vcvarsall.bat x86_amd64
vcvarsall.bat x86_amd64 10.0.10240.0
vcvarsall.bat x86_arm uwp 10.0.10240.0
vcvarsall.bat x86_arm onecore 10.0.10240.0 -vcvars_ver=14.0
vcvarsall.bat x64 8.1
vcvarsall.bat x64 store 8.1
Please make sure either Visual Studio or C++ Build SKU is installed.
當我直接調用 vcvarsall.bat 時,我看到了相同的錯誤消息。 所以我認為 vcvarsall.bat 正在某處被調用。 但我不知道如何修復它。 我做了一些研究,但沒有發現任何東西。
我最近偶然發現了這個問題的一個類似變體,我發現繞過它的唯一方法是在 tasks.json 上配置 shell 選項。 像這樣:
{
"version": "2.0.0",
"windows": {
"options": {
"shell": {
"executable": "cmd.exe",
"args": [
"/d", "/c", "Your\\Path\\To\\vcvarsx86_arm64.bat", "&"
]
}
}
},
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "echo write your build command here"
}
]
}
我想添加到上面 Ikeike 的答案中,並指出,如果您不想覆蓋用於文件中所有任務的外殼程序,您可以調整該方法以僅從當前外殼程序調用cmd.exe
(在我的情況下,Powershell)。 例如,我的任務如下所示:
"label": "Configure (CMake, Ninja)",
"type": "shell",
"options":
{
"cwd": "${workspaceFolder}\\build"
},
"command": "cmd.exe",
"args":
[
"/d",
"/c",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Auxiliary\\Build\\vcvars64.bat",
"'&'",
"cmake",
"-G", "Ninja",
".."
]
}
Powershell 要求我引用&
,但其余的很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.