Подтвердить что ты не робот

Невозможно указать компилятор с помощью 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/, и он работает.

Любая идея?

Платформа:

  • Windows 7
  • MinGW/GCC 4.6
4b9b3361

Ответ 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++.