【配置CMake报C&CXX编译器找不到错误】

问题描述:

使用CMake进行配置时,generator选择VS2015,platform选择x64,点击finish后,出现如下问题:C与CXX编译器无法找到;同时打开CMakeError.log,显示“error LNK1104 无法打开文件“ucrtd.lib” ”。

使用VS2015做个简单项目,比如printf “hello”,调试无法通过,提示“无法打开包括文件stdio.h” ,此现象为当前问题的最直接表现,CMake无法配置成功也由此衍生。(好的习惯是安装完VS后,先测试VS是否可以调试成功,再做其他配置,显然操作者并没有按此步骤执行)

原因分析:

VS2015无法打开包括文件stdio.h ctype.h ucrtd.lib等标准库文件,其核心原因是安装时Windows kits 10的版本号与VS2015中使用的版本号不一致所导致。在VS环境变量中其Windows kits的版本号默认为10.0.10240.0,而实际打开C:\Program Files (x86)\Windows Kits\10\Include文件夹看到的版本名称是10.0.10150.0或者其他版本号。Lib文件等也是一样的情况。解决问题的核心是把VS2015中的默认设置修改为实际安装的Windows kits版本号。

解决方案:

1、用文件资源管理器进入C:\Program Files (x86)\Windows Kits\10\Include文件夹,查看实际安装的Windows Kits版本号,例如10.0.10150.0。
【配置CMake报C&CXX编译器找不到错误】_第1张图片
2、用文件资源管理器进入
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140文件夹,找到Microsoft.Cpp.Common.props文件。
【配置CMake报C&CXX编译器找不到错误】_第2张图片
3、鼠标右键点击,选择文件属性,去除只读的文件属性。
【配置CMake报C&CXX编译器找不到错误】_第3张图片
4、使用文本编辑器打开Microsoft.Cpp.Common.props文件,找到如下内容:

<TargetUniversalCRTVersion Condition="'$(TargetUniversalCRTVersion)' == ''  and 
('$(TargetPlatformVersion)' == '8.1' or '$(DefineWindowsSDK_71A)' == 
'true')">10.0.10240.0</TargetUniversalCRTVersion><UniversalCRT_PropsPath Condition="'$(UniversalCRT_PropsPath)' == 
''">$(UniversalCRTSdkDir)\DesignTime\CommonConfiguration\Neutral\ucrt.props</UniversalCRT_PropsPath>

修改10.0.10240.0为10.0.10150.0(步骤1中查看的版本号)。
【配置CMake报C&CXX编译器找不到错误】_第4张图片
5、保存文件。保存过程中会提示文件只读无法保存,是因为文本编辑器的权限不够。此时我们选择另存为,保存到其他文档目录。之后复制文件并粘贴回C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140文件夹,覆盖Microsoft.Cpp.Common.props文件。至此问题彻底解决。

你可能感兴趣的:(visualstudio)