Ошибка CMake в CMakeLists.txt: 30 (проект): не удалось найти CMAKE_C_COMPILER

106

Я пытаюсь создать решение Visual Studio с CMake для компиляции последней версии aseprite, а CMake продолжает предоставлять мне:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

Я уже скачал GCC и использую Visual Studio 2015 .

Я следую этому руководству:

https://github.com/aseprite/aseprite/blob/master/INSTALL.md

Кайо Фонтес
источник
Вы можете настроить проект либо для Visual Studio с его компилятором, либо для Makefiles с помощью gcc. Какой метод вы пробовали?
Цыварев
Какую команду cmake вы вводите?
bames53
Вы используете последнюю версию CMake? Какой генератор вы использовали? Вы запускали команды из командной строки Visual Studio 2015 (чтобы в ней были установлены переменные среды компилятора)?
drescherjm
1
@ bames53 Просто хотел добавить в соответствующие командные строки, чтобы @Caio Fontes попробовал: cmake .. -G "Visual Studio 14 2015" или cmake .. -G "MSYS Makefiles"(если имеется в gccвиду MinGW). Я много раз видел эти вопросы (например, здесь , здесь или здесь ), и я думаю, что нам не хватает комбинированного / учебного ответа по SO.
Флориан
1
Возможный дубликат проблемы генерации решения для VS 2017 с помощью CMake
Марк Инграм

Ответы:

97

Эти сообщения об ошибках

CMake Error at ... (project):
    No CMAKE_C_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also ".../CMakeFiles/CMakeOutput.log".
See also ".../CMakeFiles/CMakeError.log".

или

CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found.
Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
...
-- Configuring incomplete, errors occurred!

просто означает, что CMake не смог найти ваш компилятор C / CXX для компиляции простой тестовой программы (одна из первых вещей, которые CMake пробует при обнаружении вашей среды сборки).

Действия по поиску проблемы зависят от среды сборки, которую вы хотите создать. Следующие руководства представляют собой сборник ответов здесь, на Stack Overflow, и некоторые из моих собственных опытов с CMake в Microsoft Windows 7/8/10 и Ubuntu 14.04.

Предварительные условия

  • Вы установили компилятор / IDE, и он смог однажды скомпилировать любую другую программу (напрямую без CMake)
  • У вас последняя версия CMake
  • У вас есть права доступа к диску, на котором CMake должен сгенерировать среду сборки.
  • У вас есть чистый каталог сборки (потому что CMake кеширует вещи с последней попытки), например, как подкаталог вашего исходного дерева

    Windows cmd.exe

    > rmdir /s /q VS2015
    > mkdir VS2015
    > cd VS2015

    Оболочка Bash

    $ rm -rf MSYS
    $ mkdir MSYS
    $ cd MSYS

    и убедитесь, что ваша командная оболочка указывает на ваш недавно созданный двоичный выходной каталог.

Общие вещи, которые вы можете / должны попробовать

  1. Может ли CMake найти и запустить с любым / вашим компилятором по умолчанию? Беги без генератора

    > cmake ..
    -- Building for: Visual Studio 14 2015
    ...

    Идеально, если он правильно определил генератор для использования - как здесь Visual Studio 14 2015

  2. Что на самом деле не удалось?

    В выходном каталоге предыдущей сборки просмотрите CMakeFiles\CMakeError.logлюбые сообщения об ошибках, которые имеют для вас смысл, или попробуйте открыть / скомпилировать тестовый проект, созданный в CMakeFiles\[Version]\CompilerIdC| CompilerIdCXXнепосредственно из командной строки (как указано в журнале ошибок).

CMake не может найти Visual Studio

  1. Попробуйте выбрать правильную версию генератора :

    > cmake --help
    > cmake -G "Visual Studio 14 2015" ..
  2. Если это не помогает, попробуйте сначала установить переменные среды Visual Studio (путь может отличаться):

    > "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
    > cmake ..

    или используйте ярлык в Developer Command Prompt for VS2015меню «Пуск» Windows в разделе All Programs/ Visual Studio 2015/ Visual Studio Tools(спасибо @Antwane за подсказку).

Справочная информация : CMake поддерживает все выпуски и варианты Visual Studio (Express, Community, Professional, Premium, Test, Team, Enterprise, Ultimate и т. Д.). Чтобы определить местонахождение компилятора, он использует комбинацию поиска в реестре (например, в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[Version];InstallDir), переменных системной среды и - если никто из других ничего не придумал - просто пытается вызвать компилятор.

CMake не может найти GCC (MinGW / MSys)

  1. Вы запускаете bashоболочку MSys msys.batи просто пытаетесь напрямую вызватьgcc

    $ gcc
    gcc.exe: fatal error: no input files
    compilation terminated.

    Здесь он нашел gcc и жалуется, что я не дал ему никаких параметров для работы.

    Итак, должно работать следующее:

    $ cmake -G "MSYS Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ make

    Если GCC не найден, вызовите export PATH=...добавление пути к вашему компилятору (см. Как установить переменную среды PATH в сценарии CMake? ) И повторите попытку.

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

    $ export CC=/c/MinGW/bin/gcc.exe
    $ export CXX=/c/MinGW/bin/g++.exe
    $ cmake -G "MinGW Makefiles" ..
    -- The CXX compiler identification is GNU 4.8.1
    ...
    $ mingw32-make

    Подробнее см. Как указать новый путь GCC для CMake.

    Примечание : при использовании генератора "MinGW Makefiles" вы должны использовать mingw32-makeпрограмму, поставляемую с MinGW.

  3. Все еще не работает? Это странно. Убедитесь, что компилятор есть и у него есть права на исполнение (см. Также главу о предварительных условиях выше).

    В противном случае последнее средство CMake - не пытаться самостоятельно выполнить поиск компилятора и установить внутренние переменные CMake напрямую с помощью

    $ cmake -DCMAKE_C_COMPILER=/c/MinGW/bin/gcc.exe -DCMAKE_CXX_COMPILER=/c/MinGW/bin/g++.exe ..

    Для получения дополнительной информации см. Cmake не соблюдает -D CMAKE_CXX_COMPILER = g ++ и компилятор настройки ошибок Cmake.

    В качестве альтернативы эти переменные также могут быть установлены через cmake-gui.exeWindows. См. Cmake не может найти компилятор

Предыстория : почти такая же, как и в Visual Studio. CMake поддерживает всевозможные разновидности GCC. Он ищет переменные среды (CC, CXX и т. Д.) Или просто пытается вызвать компилятор. Кроме того , он обнаружит какие - либо префиксы (при кросс-компиляции ) и пытается добавить его ко всем Binutils компилятора GNU (набора инструментов ar, ranlib, strip, ld, nm, objdump, и objcopy).

Флориан
источник
1
Напоминаем, что некоторые ссылки на документы cmake указывают на действительно старую версию CMake, не забудьте использовать селектор версий, чтобы соответствовать версии, установленной на вашем компьютере (например, если вы не видите в списке более новую платформу, которая тебе нужно).
jrh 07
46

Для Ubuntu установите следующие вещи:

sudo apt-get update && sudo apt-get install build-essential
Вишну
источник
21

Это случилось со мной после того, как я установил Visual Studio 15 2017.

Компилятор C ++ для Visual Studio 14 2015 не был проблемой. Похоже, это проблема с Windows 10 SDK.

Добавление Windows 10 SDK в Visual Studio 14 2015 решило для меня проблему.

См. Прикрепленный снимок экрана.

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

Вим Ванхенден
источник
13

Я также столкнулся с этой ошибкой при работе с CMake:

No CMAKE_C_COMPILER could be found.
No CMAKE_CXX_COMPILER could be found.

Поле с предупреждением в статье библиотеки MSDN Visual C ++ в Visual Studio 2015 предоставило мне необходимую помощь.

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

Натали Коттрилл
источник
9

У меня это работает в Ubuntu 17.10 (Artful Aardvark):

apt-get update
apt-get install build-essential
purval_patel
источник
5

Я столкнулся с этой проблемой при сборке libgit2-0.23.4. Для меня проблема заключалась в том, что компилятор C ++ и связанные с ним пакеты не были установлены с VS2015, поэтому файл "C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" отсутствовал, и Cmake не смог найти компилятор.

Я попытался вручную создать проект C ++ в графическом интерфейсе Visual Studio 2015 ( C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe ), и при создании проекта мне было предложено загрузить C ++ & сопутствующие пакеты.

После загрузки необходимых пакетов я мог видеть, что vcvarsall.bat и Cmake смогли найти компилятор и успешно выполнить его со следующим журналом:

C:\Users\aksmahaj\Documents\MyLab\fritzing\libgit2\build64>cmake ..
-- Building for: Visual Studio 14 2015
-- The C compiler identification is MSVC 19.0.24210.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual        
Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual  
Studio 14.0/VC/bin/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Could NOT find PkgConfig (missing:  PKG_CONFIG_EXECUTABLE)
-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
-- zlib was not found; using bundled 3rd-party sources.
-- LIBSSH2 not found. Set CMAKE_PREFIX_PATH if it is installed outside of 
the default search path.
-- Looking for futimens
-- Looking for futimens - not found
-- Looking for qsort_r
-- Looking for qsort_r - not found
-- Looking for qsort_s
-- Looking for qsort_s - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - not found
-- Found PythonInterp: C:/csvn/Python25/python.exe (found version "2.7.1")
-- Configuring done
-- Generating done
-- Build files have been written to:    
C:/Users/aksmahaj/Documents/MyLab/fritzing/libgit2/build64
Акш1801
источник
1
Это сработало для меня. Создание проекта C ++ для установки необходимых пакетов вручную сделало свое дело.
Melaz
5

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

Затем я изменил его на «Visual Studio 11 2012», и все заработало. (У меня на компьютере установлена ​​версия Visual Studio Ultimate 2012). В общем, попробуйте ввести более старую версию Visual Studio в диалоговое окно начальной конфигурации CMake.

TSac
источник
4

Для меня эта проблема исчезла в Windows, когда я переместил свой проект в более мелкий родительский каталог, то есть в:

C:\Users\spenc\Desktop\MyProjectDirectory

вместо того

C:\Users\spenc\Desktop\...\MyProjectDirectory.

Я думаю, что источником проблемы было то, что MSBuild имеет ограничение на длину пути к файлу до 260 символов. Это приводит к тому, что основной тест компилятора, который выполняет CMake, создает проект, вызываемый CompilerIdCXX.vcxprojсбой с ошибкой:

C1083: Cannot open source file: 'CMakeCXXCompilerId.cpp'

потому что длина пути к файлу, например

C:\Users\spenc\Desktop\...\MyProjectDirectory\build\CMakeFiles\...\CMakeCXXCompilerId.cpp

превышает ограничение MAX_PATH.

Затем CMake заключает, что компилятора CXX нет.

Spenceryue
источник
2

Убедитесь, что вы выбрали правильную версию Visual Studio. Это сложнее, чем кажется, потому что Visual Studio 2015 на самом деле является Visual Studio 14, а Visual Studio 2012 - это Visual Studio 11. Я неправильно выбрал Visual Studio 15, которая на самом деле является Visual Studio 2017, когда у меня был установлен 2015.

Арьяман Гупта
источник
1

Ни одно из решений здесь не решает мою проблему - только когда я устанавливаю Центр обновления Windows для универсальной среды выполнения C.

Теперь CMake работает и больше не виснет ссылка из Visual Studio.

Обновление для универсальной среды выполнения C в Windows

Меир Геренштадт
источник
1

Вы также можете убедиться, что вы являетесь пользователем sudo и имеете доступ на ЧТЕНИЕ / ЗАПИСЬ к каталогу, с которым вы работаете. У меня была аналогичная проблема в OS X, и я решил ее, просто войдя в режим sudo.

Дэниел Рубамбура
источник
1

На всякий случай это поможет кому-то вроде меня в будущем:

У меня была эта проблема в течение 24 часов на 3 разных 64-битных машинах (Win7, Windows 8.1 VM и ноутбук WIn 8.1) - при попытке собрать WebKit с VS 2017.

Проблема здесь в том, что компилятор VC ++ (т.е. cl.exe и его зависимые библиотеки DLL) не виден для CMake. Просто. Сделав папки VC ++, содержащие эти двоичные файлы, видимыми для CMake и вашей рабочей командной строки (если вы запускаете Cmake из командной строки), вуаля! (В дополнение к ключевым вопросам, поднятым другими выше)

В любом случае, после всевозможных исправлений - как было опубликовано на этих многочисленных форумах - я обнаружил, что это просто вопрос обеспечения того, чтобы содержимое переменной PATH не было загромождено несколькими путями Visual Studio BIN и т. Д .; а вместо этого указывает на:

а) расположение вашего компилятора (т.е. cl.exe для вашей предпочтительной версии Visual Studio), который в моем случае (ориентированный на 64-разрядную платформу и разработка на 64-разрядном хосте): C: \ Program Files (x86 ) \ Microsoft Visual Studio \ 2017 \ Сообщество \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ Hostx64 \ x64

б) и, кроме того, папка, содержащая зависимую DLL с именем (от которой зависит cl.exe): api-ms-win-crt-runtime-l1-1-0.dll которая на моем компьютере:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Remote Debugger \ x64

Эти два каталога, добавленные в упрощенную переменную CUSTOM System Path (работающую в режиме командной строки с привилегиями администратора), устранили мои сообщения «CMAKE_C_COMPILER не может быть найден» и «CMAKE_CXX_COMPILER не может быть найден». ошибки.

Надеюсь, это кому-то поможет.

GreatCentralSun
источник
1

Я получаю именно ту ошибку, о которой сообщалось, если ccache включен, при использовании генератора Xcode CMake . Отключение ccache устранило проблему для меня. Ниже я представляю исправление / проверку, которая работает для MacOS, но должна работать аналогично на других платформах.

По-видимому, можно использовать генератор Xcode CMake (и другие) также в сочетании с ccache, как описано здесь . Но сам никогда не пробовал.

# 1) To check if ccache is enabled:
echo $CC
echo $CXX
# This prints something like the following: 
#     ccache clang -Qunused-arguments -fcolor-diagnostics. 
# CC or CXX are typically set in the `.bashrc` or `.zshrc` file.

# 2) To disable ccache, use the following:
CC=clang
CXX=clang++

# 3) Then regenerate the cmake project
cmake -G Xcode <path/to/CMakeLists.txt>
Норманий
источник
1
Мне удалось решить ту же проблему, убедившись, что вывод «xcode-select -p» указывает на мою установку Xcode. В моем случае было достаточно установки Xcode и запуска «xcode-select -r».
TomTasche
0

Я обновил Visual Studio 2015 с обновлением 2 до Visual Studio 2015 с обновлением 3, и это решило мою проблему.

TripleS
источник
Это решение потребовалось у меня на работе после того, как они выпустили обновление ОС Windows. Я использовал по крайней мере 2 решения на этой странице, чтобы исправить ошибку. Ошибка может возникнуть в любом количестве условий, поэтому существует несколько разных, но работающих ответов.
Натали Коттрилл,
0

У меня была такая же проблема с cmake-gui ( No CMAKE_CXX_COMPILER could be found.), хотя запуск CMake из командной строки работал нормально. После добавления записей вручную

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

в переменную среды PATH, это сработало для меня.

Helmken
источник
0

Для меня он работал , чтобы использовать Developer Command Prompt , который поставляется с Visual Studio , а затем просто cdчтобы your/jcef/dirи запуститьcmake -G "Visual Studio 14 Win64" ..

Марк Дирвен
источник
0

У меня такая же проблема.

Я пытался установить dlib на свой компьютер, и это дало мне эту ошибку. Учебник, упомянутый в вопросе, приводит к загрузке Visual Studio 2017. Я решил это, удалив VS 2017 и установив VS 2015

Можно установить VS 2015 через этот поток stackoverflow: Как загрузить Visual Studio Community Edition 2015 (не 2017)

Апраджита Верма
источник
0

Я знаю, что этот вопрос касается Visual Studio 2015. Я столкнулся с этой проблемой с Visual Studio 2017. При поиске в Google я попал на эту страницу. Посмотрев на первые 2,3 ответа, я понял, что это проблема с установкой vc ++. Установка рабочей нагрузки «Разработка настольных компьютеров на c ++» решила проблему.

Настольная разработка на c ++

Асад
источник
0

Посмотрите в Cmakelists.txt, если вы найдете ARM, вам необходимо установить C ++ для 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, например clang, и, возможно, установка clang будет работать в другом направлении.

Вы можете с необязательным удалением в cmakelists.txt и с # перед enable_language, если вы не компилируете для ARM.

Dealazer
источник