复制VS编译命令后出现include路径未设置错误,求VS传库路径方式
Visual Studio如何告知编译器标准库头文件路径?
我参考Stack Overflow上的方法获取了Visual Studio按下Ctrl+F7编译单个文件时的完整命令行(已格式化以提升可读性):
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\CL.exe" /c /ZI /JMC /nologo /W3 /WX- /diagnostics:column /sdl /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /permissive- /Zc:wchar_t /Zc:forScope /Zc:inline /std:c++20 /Fo"Debug\\" /Fd"Debug\vc142.pdb" /external:W3 /Gd /TP /analyze- /FC /errorReport:prompt StringFormatting.cpp
我按以下步骤执行该命令:
- 在StringFormatting.cpp所在目录打开PowerShell提示符
- 复制粘贴上述命令行,并为路径含空格的CL.exe添加了引号
执行后收到错误:
[...] StringFormatting.h(2,10): fatal error C1034: string: no include path set
该头文件前两行内容为:
#pragma once #include <string>
显然编译器无法找到<string>这类标准库头文件,请问Visual Studio是如何告知编译器库路径的?
解答:
Visual Studio主要通过两种方式给CL.exe传递头文件搜索路径:
自动配置环境变量
Visual Studio自带的开发者命令提示符启动时,会自动设置INCLUDE、LIB等关键环境变量。其中INCLUDE变量包含了MSVC标准库、Windows SDK等所有必要的头文件路径。普通PowerShell或Cmd里没有这些变量,直接运行CL.exe自然找不到标准库头文件。命令行显式指定路径
编译时,Visual Studio会自动给CL.exe添加/I参数,直接指定头文件的搜索路径。比如针对MSVC标准库,会添加类似/I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\include"的参数;针对Windows SDK,也会追加对应版本的include路径。
解决当前问题的方法:
- 直接使用Visual Studio开发者命令提示符执行编译命令:在开始菜单的Visual Studio文件夹中找到它,打开后再运行命令,环境变量已自动配置完成,不会再出现找不到头文件的问题。
- 手动给CL.exe添加所有
/I参数:把标准库、Windows SDK等所有需要的头文件路径都用/I参数加到命令行里,但这种方式需要手动收集所有路径,非常繁琐,优先推荐第一种方法。
内容的提问来源于Stack Exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

