【发布时间】:2019-10-02 08:21:50
【问题描述】:
我的问题与此类似:Problems generating solution for VS 2017 with CMake,但该解决方案对我不起作用。
在 VS 2017 的开发人员命令提示符 中运行 cmake 时,我收到错误消息(来自 CMakeError.log):
LINK:致命错误 LNK1104:无法打开文件“ucrtd.lib”[E:\Projects\My Project\VS\CMakeFiles\3.14.4\CompilerIdC\CompilerIdC.vcxproj]
但文件ucrtd.lib 位于Windows Kits 文件夹中。
回显 %LIB%
D:\Program Files (x86)\Microsoft Visual Studio 2017 Community\VC\Tools\MSVC\14.16.27023\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\ lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x86;C:\Program Files(x86)\Windows Kits\10 \lib\10.0.17763.0\um\x86;
dir "C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x86\" /w /b
libucrt.lib
libucrtd.lib
ucrt.lib
ucrtd.lib
我也尝试手动运行CMakeError.log中列出的构建命令,成功,没有错误。
CL.exe /c /nologo /W0 /WX- /diagnostics:classic /Od /Oy- /D _MBCS /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\" /Fd"Debug\vc141.pdb" /Gd /TC /analyze- /FC /errorReport:queue CMakeCCompilerId.c
link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID: 1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X86 /SAFESEH Debug\CMakeCCompilerId.obj
所以看起来 cmake 没有识别环境变量,还是我错过了一些重要的步骤?
cmake 版本是 3.14.4
Visual Studio 版本是 15.9.7
【问题讨论】:
-
您是否尝试明确告诉 CMake 以您已安装的特定 Windows 版本为目标:
-DCMAKE_SYSTEM_VERSION=10.0.17763.0?见帖子here。 -
太棒了!添加此作为答案。上述帖子显示CMake会检查
Windows Kits根文件夹的一些注册表值,如果安装了多个VS版本,可能会首先找到错误的。
标签: visual-studio cmake