Невозможно указать компилятор с помощью CMake
У меня есть проблема с этим CMakeLists.txt
файлом:
cmake_minimum_required(VERSION 2.6)
SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)
SET(CMAKE_CXX_COMPILER C:/MinGW/bin/g++)
project(cmake_test)
add_executable(a.exe test.cpp)
Вызов cmake с помощью cmake -G "MinGW Makefiles"
, он не работает со следующим выходом:
c:\Users\pietro.mele\projects\tests\buildSystem_test\cmake_test>cmake -G "MinGW Makefiles" .
-- The C compiler identification is GNU 4.6.1
-- The CXX compiler identification is GNU 4.6.1
-- Check for working C compiler: C:/MinGW/bin/gcc
CMake Error: your C compiler: "C:/MinGW/bin/gcc" was not found. Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: Internal CMake error, TryCompile configure of cmake failed
-- Check for working C compiler: C:/MinGW/bin/gcc -- broken
CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
The C compiler "C:/MinGW/bin/gcc" is not able to compile a simple test
program.
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:10 (project)
CMake Error: your C compiler: "C:/MinGW/bin/gcc" was not found. Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: your CXX compiler: "C:/MinGW/bin/g++" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
-- Configuring incomplete, errors occurred!
Однако компилятор gcc
находится в C:/MinGW/bin/
, и он работает.
Любая идея?
Платформа:
Ответы
Ответ 1
Никогда не пытайтесь установить компилятор в файле CMakeLists.txt
.
См. FAQ по CMake о том, как использовать другой компилятор:
https://gitlab.kitware.com/cmake/community/wikis/FAQ#how-do-i-use-a-different-compiler
(Обратите внимание, что вы пытаетесь использовать метод № 3, а в разделе часто задаваемых вопросов говорится "(избегайте)"...)
Мы рекомендуем избегать использования метода "в CMakeLists", поскольку с ним возникают проблемы, когда для первой настройки используется другой компилятор, а затем изменяется файл CMakeLists, чтобы попытаться установить другой компилятор... И поскольку цель файла CMakeLists должен работать с несколькими компиляторами, в соответствии с предпочтениями разработчика, использующего CMake.
Лучший способ - установить переменные окружения CC
и CXX
перед первым вызовом CMake в дереве сборки.
После того, как CMake обнаружит, какие компиляторы использовать, он сохранит их в файле CMakeCache.txt
, чтобы он мог генерировать правильные системы сборки, даже если эти переменные исчезнут из среды...
Если вам когда-нибудь понадобится изменить компиляторы, вам нужно начать с нового дерева сборки.
Ответ 2
У меня была аналогичная проблема с Pietro,
Я нахожусь в окне 10 и использую "Git Bash".
Я попытался выполнить → cmake -G "MinGW Makefiles", но я получил ту же ошибку, что и Pietro.
Затем я попробовал → cmake -G "MSYS Makefiles", но понял, что мне нужно правильно настроить среду.
Убедитесь, что установлен путь к C:\MinGW\msys\1.0\bin и проверьте, есть ли у вас файл gcc.exe. Если gcc.exe не существует, вы должны запустить C:/MinGW/bin/mingw-get.exe и установить gcc из MSYS.
После этого он отлично работает для меня
Ответ 3
Использование с опцией FILEPATH
может работать:
set(CMAKE_CXX_COMPILER:FILEPATH C:/MinGW/bin/gcc.exe)
Ответ 4
Я была такая же проблема. И в моем случае это было довольно просто. Хитрость заключается в том, чтобы просто добавить ".exe" в путь к компилятору. Итак, вместо:
SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)
Это должно быть
SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc.exe)
То же самое относится к g++.