CMake не находит компилятор Visual C ++

118

После установки Visual Studio 2015 и запуска CMake в предыдущем проекте CMake выдает ошибку о том, что не может найти компилятор C.

The C compiler identification is unknown
The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.

Я искал cl.exeв папке Visual Studio C:\Program Files\Microsoft Visual Studio 14.0, и не нашел.

Как настроить CMake для работы в Windows с Visual Studio 2015?

Ашер
источник
1
Может быть, путь установки 2015 года не соответствует ожиданиям CMake? Какую версию CMake вы используете? Кроме того, я не знаю о версии CMake для Windows, но возможно, что CMake заглянет в файл, PATHчтобы найти нужную программу, поэтому, если она не обновлена, она не может найти компилятор.
Какой-то чувак-программист
1
Я использую cmake версии 3.2.3, которая утверждает, что поддерживает Visual Studio 2015
Ашер,
1
Используйте версию 3.2.x, я столкнулся с этой проблемой при установке Cmake до VS2015, поэтому переустановите cmake, исправьте это для меня
Andiana
Иногда вы просто забываете перезагрузить компьютер или не хотите этого делать после установки или обновления Visual Studio. В этом случае CMake не найдет ваш компилятор.
Noki

Ответы:

124

Я нашел решение. Несмотря на то, что интегрированная среда разработки Visual Studio была успешно установлена, в ней не устанавливались никакие инструменты сборки и, следовательно, не устанавливался компилятор C ++.

Пытаясь вручную создать проект C ++ в графическом интерфейсе Visual Studio 2015, я смог предложить ему загрузить пакеты C ++. После этого CMake смог без труда найти компилятор.

Ашер
источник
2
Круто, этот ответ дал мне ключ к разгадке. Я использую свой ISO VS2015 для установки компонентов C ++ и решения проблемы.
Питер Лян
Я также установил с использованием VS2015 ISO, и он установил только базовые части vb / c #. Пришлось снова запустить ISO, чтобы изменить и установить другие вещи C ++.
Abhinav Gauniyal 05
2
Какие именно пакеты / компоненты / прочее вы установили? Я создал Visual C ++ / Win32Project, он установил два компонента и нормально запустил внутри VS, но cmake по-прежнему жаловался. Спасибо. -S
ssimm
Это очень мило!
user2434741
2
Это сработало и с vs 2017 - какая странная вещь! Спасибо за подсказку, дружище!
Стив Хорват
36

Вот решение, которое сработало для меня:

  1. Откройте инструмент командной строки Visual Studio (от имени администратора). В Windows 10 это может называться «Командная строка разработчика».
  2. Перейдите туда, где у вас есть исполняемый файл CMake
  3. Запускаем Cmake.exe
  4. Как обычно, выберите сборку и исходную папку
  5. Выберите соответствующий компилятор Visual Studio и нажмите кнопку настройки.

Надеюсь, он заработает без проблем.

фортуна
источник
3
Я не думаю, что вам нужно запускать командную строку VS от имени администратора. Но запуск командной строки VS помещает в путь все, что ищет cmake. В зависимости от того, как вы установили CMake (поместили ли вы его в путь), вы также можете перейти в каталог сборки и запустить cmake ..оттуда. В любом случае проголосовали за, потому что, например, терминал git-bash не автоматически помещает все на свой путь. Это мне помогло!
hetepeperfan
1
Это больше похоже на обходной путь, чем на решение, поскольку обычно генераторам IDE не требуются различные переменные среды, как указано в наборе командных подсказок dev (вам это понадобится только в том случае, если вы используете генератор make-файла или аналогичный, например as Ninja)
Райан Павлик
2
обновление: в Windows 10 это называется командной
строкой
2
Очень странное объяснение: 1: Это не называется командной строкой VS Studio 2: «перейти», вы имеете в виду использование команды «cd»? 3: Вы имеете в виду, запустить cmake-gui? Как вы говорите на шаге 5, чтобы «щелкнуть» по кнопке 4: Продолжить ?? вы имеете в виду заполнить? 5: В раскрывающемся списке в окне настройки я могу выбрать компилятор VS, но компиляторы C и C ++ по-прежнему неизвестны ...
DrumM
1
Кстати, просто введите cmake в поиске, и вы найдете cmake-gui
DrumM
31

Я просмотрел файл CMakeError.log и обнаружил ошибку о cannot run 'rc.exe'

Я искал и нашел этот ответ, чтобы скопировать RC.Exe и RcDll.Dll из корзины Microsoft SDK в корзину VC, а затем CMake работал.


Изменить: верхний ответ на другой вопрос предполагает, что это проблема с PATH, поэтому этого может быть достаточно, чтобы убедиться, что корзина Microsoft SDK находится в вашем PATH.

Карл Уолш
источник
15

Убедитесь, что вы используете правильную версию Visual Studio в генераторе. Я неправильно выбрал Visual Studio 15 при установке Visual Studio 14.

Хрушикеш Кулкарни
источник
3
Это тоже была моя проблема. Это сбивает с толку, потому что Visual Studios 2015 - это версия 14!
Пол
4
Обратите внимание, что вам может потребоваться удалить кеш, чтобы изменить версию VS. Для этого щелкните Файл> Удалить кеш.
Пол
Это помогло ... версионирование в лучшем виде!
Ноэль Видмер
arrrrg, @PaulWintz, спасибо за напоминание. Я думаю, что в моем случае я запускал cmake с чистым кешем cmake, но пока VisualStudio ждал, что я перезапущу компьютер, чтобы завершить обновление VS, а затем cmake умело кэшировал плохую ситуацию.
Орион Элензил
13

Те, кто сталкивается с этим в Visual Studio 2017: есть функция, связанная с CMake, которую необходимо выбрать и установить вместе с соответствующими наборами инструментов компилятора. Смотрите скриншот ниже.

Инструменты Visaul C ++ для CMake должны быть установлены

Вадим Берман
источник
А как насчет версии 2015? Я не смог найти этот флажок в установке 2015 года. Одним из решений может быть обновление до 2017 года ...
DrumM
1
@DrumM, это специально для Visual Studio 2017. Я не верю, что эта функция существует в VS 2015.
Вадим Берман,
Вы уверены, что это необходимо? Разве это не только для использования CMake из Visual Studio?
Питер Мортенсен
@PeterMortensen: это решило проблему для меня. Опять же, Visual Studio 2017.
Вадим Берман,
9

Если ни одно из вышеперечисленных решений не помогло, остановитесь и проверьте работоспособность.

Я сгорел, используя неправильную -G <config>строку, и это дало мне вводящую в заблуждение ошибку.

Во-первых, запустите из командной строки VS, а не из обычной командной строки. Вы можете найти его в Start Menu -> Visual Studio 2015 -> MSBuild Command Prompt for VS2015разделе Это настраивает все правильные пути к инструментам VS и т. Д.

Теперь посмотрим, какие генераторы доступны в cmake ...

cmake -help

...<snip>... The following generators are available on this platform: Visual Studio 15 [arch] = Generates Visual Studio 15 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files. Optional [arch] can be "Win64" or "ARM". Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files. Optional [arch] can be "Win64" or "IA64". ...

Затем выберите соответствующую строку с добавленной аркой.

mkdir _build cd _build cmake .. -G "Visual Studio 15 Win64"

Запуск cmake в подкаталоге упрощает «очистку», поскольку вы можете просто удалить все в этом каталоге.

Я обновился до Visual Studio 15, но не обращал внимания и пытался сгенерировать для 2012 года.

TrophyGeek
источник
7

Для себя я проверил CMakeError.logфайл и обнаружил:

[...] ошибка MSB8036: Windows SDK версии 8.1 не найден. Установите требуемую версию Windows SDK или измените версию SDK на страницах свойств проекта или щелкнув решение правой кнопкой мыши и выбрав «Перенацелить решение».

Это несмотря на использование Visual Studio 2017 в Windows 7. Похоже, что CMake пытается создать свой проект обнаружения с помощью Windows 8.1 SDK.

Я использовал установщик Visual Studio, чтобы добавить этот компонент, и теперь CMake доволен, как моллюск.

chowey
источник
4

Меню → Visual Studio 2015 → Командная строка MSBuild для Visual Studio 2015. Тогда CMake сможет найти cl.exe.

set PATH="c:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\";%PATH%

Измените верхний путь туда, где установлен Windows SDK.

CMake может найти rc.exe.

cd на путь CMakeLists.txtи выполните:

md .build
cd .build
cmake .. -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Release
cmake --build .

Параметр после -Gдолжен быть получен CMake. Использование --help; у вас может быть или нет генератор.

Ален Вескер
источник
Если у вас установлены msvc 2015 и 2017 и вы пытаетесь выполнить сборку с помощью msvc 2015, он автоматически обнаружит SDK 10.0 при запуске командной строки vs2015. Вы можете указать версию SDK, изменив "VS2015 x64 Native Tools Command Prompt", чтобы принудительно установить 8.1 sdk, добавив at в конец параметра командной строки следующим образом; "% comspec% / k" "C: \ Program Files (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
калмия
Нужно ли мне устанавливать «Командную строку MSBuild для Visual Studio 2015» отдельно? Я установил msvc 2017, но командной строки для Visual Studio нет.
встречено
2

Я столкнулся с той же проблемой и исправил ее, перезапустив установку Visual Studio и проверив следующий параметр:

Windows and Web Development/ Universal Windows App Development Tools/Windows 10 SDK

Он содержит стандартные заголовки C ++, используемые в большинстве приложений, поэтому часто бывает необходимо установить и его.

Филипп Фердинанд
источник
2

У меня была эта проблема под Windows 10 при использовании Visual Studio 2015 Professional, а Visual Studio 2015 Express работала! Под Windows 7 работали обе версии Visual Studio.

Новые проекты, созданные из Visual Studio 2015 Professional IDE, успешно компилируются, но CMake не может найти отчет компилятора:

The C compiler identification is unknown
The CXX compiler identification is unknown

Я обновил CMake с 3.4.1 до 3.11.4, и теперь проблема исчезла.

jpo38
источник
1

Если вы используете Visual Studio 2017, вам понадобится как минимум CMake 3.8!

Ларс Бильке
источник
1

У меня была аналогичная проблема с проектом Visual Studio 2017, созданным через CMake. Некоторые пакеты отсутствовали при установке Visual Studio в разработке для настольных ПК с помощью C ++. См. Снимок:

Пакеты Visual Studio 2017:

Пакеты Visual Studio2017

Также обновите CMake до последней версии.

vinodsaluja
источник
0

В моем случае была установлена ​​переменная среды, которая была причиной этой ошибки. Проблема была решена после удаления cxx_flags из переменных окружения.

StarGer
источник
0

У меня возникла эта проблема с CMake 3.12.1 после обновления Visual Studio 2017. Я просто повторно запустил CMake, и он сработал.

0xF
источник
0

В моем случае я мог видеть, CMakeError.logчто CMake не может найти Windows SDK (MSB8003: Could not find WindowsSDKDir variable from the registry ).

Версия может быть указана в командной строке при первом запуске CMake, используя:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Я продвинулся дальше после установки этого, но позже я столкнулся с другими проблемами (поэтому я предполагаю, что моя среда каким-то образом испортилась), но, возможно, это поможет кому-то с этой проблемой.

Zitrax
источник
0

Пара советов:

  • Попробуйте установить путь вручную, отметив «расширенный» и изменив CMAKE_LINKER и CMAKE_MAKE_PROGRAM
  • Удалите кеш - в CMake с графическим интерфейсом перейдите в: Файл → Удалить кеш.

Моя проблема заключалась в сочетании ранее заявленного: я установил версию компилятора 15 вместо 14, и после исправления мне пришлось удалить кеш.

Я также запустил командную строку Visual Studio как администратор, а оттуда я запустил cmake-gui.exe

Потом все заработало как положено.

Rarach
источник
0

В моем случае проблема заключалась в том, что родительский проект, который включает googletest через

add_subdirectory(gtest_dir)

был определен как

PROJECT( projname CXX )

Как-то CMake не распознает

PROJECT(sub_project_name CXX C)

поскольку компилятор C не установлен в родительском элементе.

Я решил проблему, используя

PROJECT( projname CXX C)

в моем основном CMakeLists.txtфайле.

mojovski
источник
0

Ни одно из предыдущих решений у меня не помогло. Однако я заметил, что, хотя я установил Visual Studio версии 15 (не путать с Visual Studio 2015), каталог, созданный на моем компьютере, был для Visual Studio 14.

Когда я указывал Visual Studio 14 при нажатии кнопки конфигурации, она работала.

Гамалиил
источник
Нумерация версий для Visual Studio просто ... странная. Visual Studio 14 на самом деле является Visual Studio 2015, Visual Studio 2014 не существует. См. Ответ
trophygeek
0

Я нашел это решение в stackoverflow, и я работаю на меня, хотя и не работаю с другими решениями, если у вас ОС Windows 10, выполнение следующих шагов решит проблему:

1) перейдите в C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.1A \ Bin

2) затем скопируйте RC.exe и RcDll из этого файла

3) перейдите в C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ bin и вставьте в него два файла, которые вы скопировали.

вот и все, я надеюсь, что это будет полезно ...

умный тигр
источник
0

Посмотрите в Cmakelists.txt, если вы обнаружите, что ARM вам нужно установить C ++ для ARM, а также использовать vcvarsall.bat для папки bin ARM.

Это такие пакеты:

Универсальная платформа Windows C ++ для ARM64 «Не требуется»

Компиляторы и библиотеки Visual C ++ для ARM «Не требуется»

Компиляторы и библиотеки Visual C ++ для ARM64 «Очень вероятно, требуются»

Required for finding Threads on ARM 
enable_language(C) 
enable_language(CXX)

Тогда проблемы могут исчезнуть:

Не удалось найти CMAKE_C_COMPILER.

Не удалось найти CMAKE_CXX_COMPILER.

Если вышеуказанное не решит вашу проблему?

При желании вы можете удалить параметры C и CXX в cmakelists.txt, установив # перед тем, где находится enable_language (C). И избегайте компиляции процессора Android ARM.

Dealazer
источник
0

Решено добавлением недостающего компонента Modify-> continue add, как указано ниже Fix

АБДУЛРАХМАН АЛХАМИС
источник
Не рекомендуется использовать только ссылку.
Ṃųỻịgǻňạcểơửṩ 07
0

У меня была связанная проблема: генераторы Visual C ++ даже не были в списке при запуске cmake --help.

Я запустил where cmakeконсоль и обнаружил, что cygwin также предоставляет свой собственный файл cmake.exe , который использовался. Изменение порядка каталогов в PATH устранило проблему.

stgatilov
источник
0

Проверка CMakeErrors.log в CMakeFiles вернула:

C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ V140 \ Platforms \ x64 \ PlatformToolsets \ v140_xp \ Toolset.targets (36,5): предупреждение MSB8003: не удалось найти переменную WindowsSdkDir_71A в реестре. TargetFrameworkVersion или PlatformToolset может иметь недопустимый номер версии.

Ошибка означает, что инструменты сборки для XP (v140_xp) не установлены. Чтобы исправить это, я установил соответствующую функцию в установщик Visual Studio 2019 на вкладке «Отдельные компоненты»:

введите описание изображения здесь

Натан Мойнвазири
источник
0

У меня была эта проблема с CMake GUI и VS 21019 Community Edition. Я думаю, что, возможно, я установил CMake до Visual Studio - конечно, после того, как я обновил CMake 3.15.2 до 3.15.3, проблема исчезла.

Майк Пелтон
источник
0

Проверить имя папки слишком долго или нет.

user1633912
источник
-3

Поскольку CMake не может найти ваш компилятор Visual Studio. Запустите любой проект, который загрузит необходимые компиляторы, и тогда CMake сможет его найти.

Kushal
источник