Помилка CMake на CMakeLists.txt: 30 (проект): CMAKE_C_COMPILER не знайдено


105

Я намагаюся зробити рішення 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). І я дуже часто бачив ці питання (наприклад, тут , тут чи тут ), і я думаю, що нам не вистачає комбінованої / навчальної відповіді щодо ТА.
Флоріан,

Відповіді:


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

    Шкаралупа Баша

    $ 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

41

Для Ubuntu будь ласка, встановіть нижче наведені нижче речі.

sudo apt-get update && sudo apt-get install build-essential

21

Це сталося зі мною після того, як я встановив Visual Studio 15 2017.

Компілятор C ++ для Visual Studio 14 2015 не був проблемою. Здавалося, це проблема з Windows 10 SDK.

Додавання SDK для Windows 10 до 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 ++.



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

1
Це працювало для мене. Створення проекту C ++ вручну для встановлення необхідних пакетів зробило свою справу.
Мелаз

5

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

Потім я змінив його на "Visual Studio 11 2012", і все спрацювало. (На моєму ПК є версія Visual Studio Ultimate 2012). Загалом, спробуйте ввести старішу версію версії Visual Studio у початковому діалоговому вікні конфігурації CMake.


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.


2

Переконайтесь, що ви вибрали правильну версію Visual Studio. Це складніше, ніж здається, тому що Visual Studio 2015 насправді є Visual Studio 14, а аналогічно Visual Studio 2012 є Visual Studio 11. Я неправильно вибрав Visual Studio 15, що є насправді Visual Studio 2017, коли я встановив 2015 рік.



1

Ви також можете переконатися, що ви користувач sudo, і у вас є доступ READ / WRITE в каталозі, в якому ви працюєте. У мене була схожа проблема в OS X, і я її виправив лише ввівши в режим sudo.


1

Про всяк випадок, коли це допоможе такому, як я в майбутньому:

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

Проста проблема тут полягає в тому, що компілятор VC ++ (тобто cl.exe і це залежні DLL) не видно CMake. Простий. Зробивши папки VC ++, що містять ті бінарні файли, видимі CMake та робочу командну підказку (якщо ви запускаєте Cmake з командного рядка), voila! (Окрім ключових моментів, піднятих іншими, вище)

У будь-якому випадку, після всіляких виправлень - як це було розміщено на цих багатьох форумах - я виявив, що ПРОСТО полягає в тому, щоб вміст змінної PATH не було захаращено кількома шляхами Visual Studio BIN тощо. і натомість вказує на:

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

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

C: \ програмні файли (x86) \ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ Remote Debugger \ x64

Ці два каталоги додані до спрощеної та змінної системного шляху CUSTOM (працює під привітанням адміністратора з приватним доступом), усунуто моє "Не знайдено CMAKE_C_COMPILER" і "CMAKE_CXX_COMPILER не було знайдено." помилки.

Сподіваюся, це комусь допоможе.


1

Я отримую саме повідомлену помилку, якщо ввімкнено кеш-пам'ять при використанні генератора Xcode CMake . Відключення кеш-пам'яті вирішило проблему для мене. Нижче я представляю виправлення / перевірку, що працює для 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 до оновлення 3 для Visual Studio 2015, і це вирішило мою проблему.


Це рішення знадобилось у мене на роботі після того, як вони натиснули оновлення ОС 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, вона працювала на мене.


0

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


0

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

Я намагався встановити dlib на свою машину, і це дало мені цю помилку. Підручник, згаданий у запитанні, веде до завантаження візуальної студії 2017. Я вирішив це, видаливши VS 2017 та встановивши VS 2015

Можна встановити VS 2015 за допомогою цього потоку stackoverflow: Як завантажити Visual Studio Community Edition 2015 (не 2017)


0

Мені відомо, що це питання стосується візуальної студії 2015. Я зіткнувся з цим питанням у візуальній студії 2017. Під час пошуку в Google я приземлився на цю сторінку. Переглянувши перші 2,3 відповіді, я зрозумів, що це проблема встановлення vc ++. Встановлення навантаження "Розробка робочого столу з c ++" вирішила проблему.

Розробка робочого столу за допомогою ++


0

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

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

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