vc2015 中ctype.h stdio.h等文件打不开,后来发现是vc自动设置的包含目录出错了,经过搜索找到了这些系统头文件的定义位置,特此记录。
文件C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Common.props中设置各种include路径,比如
VC_VC_IncludePath:
<VC_IncludePath>$(VC_VC_IncludePath);$(VC_ATLMFC_IncludePath);$(UniversalCRT_IncludePath);</VC_IncludePath>
可以看到ucrt目录由UniversalCRT_IncludePath给出。
想要修改urct目录,修改文件中版本号即可(我改成了10.0.14393.0):
<!-- 10.0.14393.0 is the hardcoded checked-in version of uCRT that we use in case we target 8.1 SDK -->
<TargetUniversalCRTVersion Condition="'$(TargetUniversalCRTVersion)' == '' and ('$(TargetPlatformVersion)' == '8.1' or '$(DefineWindowsSDK_71A)' == 'true')">10.0.14393.0</TargetUniversalCRTVersion>
完整的ucrt路径在C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\uCRT.props里定义:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<UCRTContentRoot Condition="'$(UCRTContentRoot)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots@KitsRoot10)</UCRTContentRoot>
<UCRTContentRoot Condition="'$(UCRTContentRoot)' == ''">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots@KitsRoot10)</UCRTContentRoot>
<TargetUniversalCRTVersion Condition="'$(TargetUniversalCRTVersion)' == ''">$(TargetPlatformVersion)</TargetUniversalCRTVersion>
<UniversalCRT_IncludePath>$(UCRTContentRoot)Include\$(TargetUniversalCRTVersion)\ucrt;</UniversalCRT_IncludePath>
<UniversalCRT_LibraryPath_x86>$(UCRTContentRoot)lib\$(TargetUniversalCRTVersion)\ucrt\x86;</UniversalCRT_LibraryPath_x86>
<UniversalCRT_LibraryPath_x64>$(UCRTContentRoot)lib\$(TargetUniversalCRTVersion)\ucrt\x64;</UniversalCRT_LibraryPath_x64>
<UniversalCRT_LibraryPath_arm>$(UCRTContentRoot)lib\$(TargetUniversalCRTVersion)\ucrt\arm;</UniversalCRT_LibraryPath_arm>
<UniversalCRT_LibraryPath_arm64>$(UCRTContentRoot)lib\$(TargetUniversalCRTVersion)\ucrt\arm64;</UniversalCRT_LibraryPath_arm64>
<UniversalCRT_SourcePath>$(UCRTContentRoot)Source\$(TargetUniversalCRTVersion)\ucrt;</UniversalCRT_SourcePath>
</PropertyGroup>
</Project>
可以看到从注册表里找sdk根目录,通过上一步修改的版本号拼接生成。