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
Asher

1
Використовуйте версію 3.2.x, я зіткнувся з цією проблемою, коли я встановлював Cmake перед VS2015, тому перевстановіть cmake, виправте це для мене
Andiana

Іноді ви просто забуваєте перезавантажити комп'ютер або не хочете після встановлення або оновлення Visual Studio. У такому випадку CMake не знайде вашого компілятора.
Нокі

Відповіді:


124

Я знайшов рішення. Поки ID Visual Studio IDE встановлений успішно, він не встановив жодних інструментів збирання, а тому не встановив компілятор C ++.

Спроби вручну створити проект C ++ у графічному інтерфейсі Visual Studio 2015, я зміг запропонувати йому завантажити пакунки C ++. Тоді CMake без особливих труднощів зміг знайти компілятор.


2
Класно, ця відповідь дала мені підказку. Я використовую свій VS2015 ISO, щоб встановити компоненти C ++ і вирішити проблему.
Пітер Лян

Я також встановив за допомогою ISO VS2015, і він встановив лише основні частини vb / c #. Довелося запустити ISO знову, щоб змінити та встановити інші матеріали c ++.
Абхінав Ганіял

2
Які саме пакунки / компоненти / речі ви встановили? Я створив Visual C ++ / Win32Project, і він встановив два компоненти і запустив всередині VS, але cmake все ще скаржився, як і раніше. Дякую. -S
ssimm

Це дуже приємно!
користувач2434741

2
Це також працювало проти 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 (набір команд Dev (вам знадобиться лише це, якщо ви використовуєте генератор makefile чи подібний, наприклад, як Ніндзя)
Райан Павлик

2
оновлення: у Windows 10 це називається командний рядок для розробників
Mattijs

2
Дуже дивне пояснення: 1: Це не називається командний рядок VS Studio 2: "навігація", ви маєте на увазі використання команди "cd"? 3: Ти маєш на увазі запустити cmake-gui? Як ви говорите на кроці 5, щоб "натиснути" на кнопку 4: Продовжити ?? ти маєш на увазі заповнити? 5: У спадному вікні у вікні налаштування я можу вибрати компілятор VS, але все ж компілятори C & C ++ невідомі ...
DrumM

1
Btw, просто введіть у пошуковий
файл

31

Я переглянув файл CMakeError.log і виявив помилку щодо cannot run 'rc.exe'

Я шукав і знайшов цю відповідь, щоб скопіювати RC.Exe і RcDll.Dll зі скриньки Microsoft SDKs у відро для VC, а потім CMake працював.


Редагувати: Верхня відповідь на інше питання говорить про те, що це проблема PATH, тому це може бути достатньо, щоб переконатися, що пакет SDK Microsoft знаходиться у вашому PATH.


15

Переконайтеся, що ви використовуєте правильну версію Visual Studio в генераторі. Коли я встановив Visual Studio 14, я неправильно вибрав.


3
Це була і моя проблема. Це заплутано, тому що Visual Studios 2015 - версія 14!
Пол Вінц

4
Зауважте, що вам може знадобитися видалити кеш, щоб змінити версію VS. Для цього натисніть Файл> Видалити кеш.
Пол Вінц

Це допомогло ... версії в найкращих випадках!
Ноель Відмер

arrrrg, @PaulWintz дякую за це нагадування. Я думаю, що в моєму випадку я запустив cmake з чистим кешем cmake, але поки VisualStudio чекав, що я перезавантажую комп'ютер, щоб завершити оновлення VS, а потім cmake вміло кешував погану ситуацію.
orion elenzil

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 року.


7

Для мене я перевірив CMakeError.logфайл і виявив:

[...] помилка MSB8036: Windows SDK версії 8.1 не знайдено. Встановіть потрібну версію пакета SDK для Windows або змініть версію SDK на сторінках властивостей проекту або клацніть правою кнопкою миші рішення та виберіть "Retarget solution".

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

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


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, він автоматично виявить 10.0 SDK під час запуску командного рядка vs2015. Ви можете вказати версію SDK, змінивши командний рядок VS2015 x64 Native Tools, щоб змусити 8.1 sdk, додавши в кінець параметра командного рядка, як це; "% comspec% / k" "C: \ Файли програми (x86) \ msdev2015 \ VC \ vcvarsall.bat" "amd64 8.1"
kalmiya

Чи потрібно мені встановлювати командний рядок MSBuild для Visual Studio 2015? Я встановив msvc 2017, але командного рядка для візуальної студії немає.
meen

2

Я зіткнувся з тією ж проблемою і виправив її, перезапустивши Visual Studio Install і перевіривши наступний варіант:

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 використовувались для роботи.

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

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

Я модернізував CMake з 3.4.1 до 3.11.4, і тепер проблеми вже немає.



1

У мене була схожа проблема з проектом Visual Studio 2017, створеним за допомогою CMake. Деякі пакети бракували під час встановлення Visual Studio в розробці Desktop за допомогою C ++. Дивіться знімок:

Пакети Visual Studio 2017:

Пакети Visual Studio2017

Також оновіть CMake до останньої версії.


0

У моєму випадку був набір змінної середовища, що і стало причиною цієї помилки. Проблема була вирішена після видалення cxx_flags зі змінних оточення.


0

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


0

У моєму випадку я міг бачити, CMakeError.logщо CMake не зміг знайти SDK для Windows ( MSB8003: Could not find WindowsSDKDir variable from the registry).

Версію можна вказати в командному рядку під час першого запуску CMake, використовуючи:

-DCMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION=

Після встановлення цього курсу я дістався далі, але пізніше я потрапив на більшу кількість питань (тому я припускаю, що оточення якимось чином заплуталося), але, можливо, це допоможе комусь із цим питанням.


0

Пара порад:

  • Спробуйте встановити шлях вручну, встановивши позначку "розширений" та змінивши CMAKE_LINKER та CMAKE_MAKE_PROGRAM
  • Видалити кеш - у CMake з GUI перейдіть до: Файл → Видалити кеш.

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

Я також запустив командний рядок Visual Studio як адміністратор і звідти запустив cmake-gui.exe

Тоді все працювало так, як треба було.


0

У моєму випадку проблема полягала в тому, що батьківський проект, який включає googletest via

add_subdirectory(gtest_dir)

було визначено як

PROJECT( projname CXX )

Якось CMake не впізнає

PROJECT(sub_project_name CXX C)

оскільки компілятор C не встановлений у батьків.

Я вирішив проблему, використовуючи

PROJECT( projname CXX C)

в моєму головному CMakeLists.txtфайлі.



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 у відповідь stackoverflow.com/a/40332976/1319284
kutschkem

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 для папки для біт ARM.

Це такі пакети:

Універсальна платформа Windows C ++ для ARM64 "Не потрібно"

Візуальні компілятори C ++ та бібліотеки для ARM "Не потрібно"

Візуальні компілятори C ++ та бібліотеки для ARM64 "Дуже ймовірно потрібні"

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

Тоді проблеми можуть зникнути:

CMAKE_C_COMPILER не знайдено.

CMAKE_CXX_COMPILER не знайдено.

Якщо вище не вирішує вашу проблему?

За бажанням ви можете видалити параметри C і CXX у cmakelists.txt, встановивши # infront, де знаходиться enable_language (C). І уникайте компіляції процесорів Android ARM.



0

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

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


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 та VS 21019 Community Edition. Я думаю, що, можливо, я встановив CMake перед Visual Studio - звичайно після оновлення CMake 3.15.2 до 3.15.3 проблема усунулася.



-3

Тому що CMake не в змозі знайти ваш компілятор Visual Studio. Почніть будь-який проект, який завантажить необхідні компілятори, і CMake повинен мати змогу його знайти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.