Моя проблема похожа на эту: Проблемы с созданием решения для VS 2017 с помощью CMake, но решение мне не подходит.
При запуске cmake в Командная строка разработчика для VS 2017 я получил ошибку (от CMakeError.log
):
LINK : fatal error LNK1104: Cannot open file "ucrtd.lib" [E:\Projects\My Project\VS\CMakeFiles\3.14.4\CompilerIdC\CompilerIdC.vcxproj]
Но файл ucrtd.lib
находится в папке Windows Kits
.
echo %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
версия визуальной студии 15.9.7
Здорово! Добавил это как ответ. Вышеупомянутый пост показывает, что CMake проверяет некоторые значения реестра для корневой папки Windows Kits
и может сначала найти неправильный, если установлено несколько версий VS.
Как упоминалось на форуме это CMake, может потребоваться явно указать CMake, какую конкретную версию Windows вы установили. Учитывая, что у вас установлена версия 10.0.17763.0
, включение следующего определения направит CMake на эту версию:
cmake -DCMAKE_SYSTEM_VERSION=10.0.17763.0
Вот документы для CMAKE_SYSTEM_VERSION
.
Как описано в здесь, если вы используете VS2022 и у вас установлен Windows SDK версии 10.0.19041.0 (это то, что устанавливается с VS2022 по умолчанию на момент написания этой статьи), то вы, возможно, столкнулись с этим.
Решение в этом случае — удалить эту версию SDK и установить другую.
Вы пытались явно указать CMake нацеливаться на конкретную версию Windows, которую вы установили:
-DCMAKE_SYSTEM_VERSION=10.0.17763.0
? Смотрите пост здесь.