Kan de compiler niet specificeren met CMake

Ik heb een probleem met dit CMakeLists.txt-bestand:

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 aanroepen met: cmake -G "MinGW Makefiles", het mislukt met de volgende uitvoer:

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!

De gcc-compiler bevindt zich echter in C:/MinGW/bin/en het werkt.

Enig idee?

Platform:

  • Windows 7
  • MinGW/GCC 4.6

Antwoord 1, autoriteit 100%

Probeer nooit de compiler in het bestand CMakeLists.txtin te stellen.

Zie de CMake FAQ over het gebruik van een andere compiler:

https:// gitlab.kitware.com/cmake/community/wikis/FAQ#how-do-i-use-a-different-compiler

(Merk op dat je methode #3 probeert en de FAQ zegt “(vermijd)”…)

We raden aan om de “in de CMakeLists”-techniek te vermijden, omdat er problemen mee zijn wanneer een andere compiler werd gebruikt voor een eerste configuratie, en dan verandert het CMakeLists-bestand om te proberen een andere compiler in te stellen… En omdat de bedoeling van een CMakeLists-bestand zou met meerdere compilers moeten werken, volgens de voorkeur van de ontwikkelaar die CMake draait.

De beste methode is om de omgevingsvariabelen CCen CXXin te stellen voordat CMake voor de allereerste keer wordt aangeroepen in een build-tree.

Nadat CMake heeft gedetecteerd welke compilers moeten worden gebruikt, slaat het deze op in het bestand CMakeCache.txtzodat het nog steeds de juiste buildsystemen kan genereren, zelfs als die variabelen uit de omgeving verdwijnen…

Als je ooit compilers moet veranderen, moet je beginnen met een nieuwe build-boom.


Antwoord 2, autoriteit 8%

Ik had een soortgelijk probleem als Pietro,

Ik gebruik Windows 10 en gebruik “Git Bash”.
Ik heb geprobeerd >>cmake -G “MinGW Makefiles” uit te voeren, maar ik kreeg dezelfde fout als Pietro.

Toen probeerde ik >>cmake -G “MSYS Makefiles”, maar realiseerde me dat ik mijn omgeving correct moest instellen.

Zorg ervoor dat u een pad instelt naar C:\MinGW\msys\1.0\bin en controleer of u gcc.exe daar heeft. Als gcc.exe er niet is, moet u C:/MinGW/bin/mingw-get.exe uitvoeren en gcc installeren vanaf MSYS.

Daarna werkt het prima voor mij


Antwoord 3, autoriteit 5%

Gebruiken met FILEPATHoptie werkt mogelijk:

set(CMAKE_CXX_COMPILER:FILEPATH C:/MinGW/bin/gcc.exe)

Antwoord 4, autoriteit 3%

Ik had hetzelfde probleem. En in mijn geval was de oplossing vrij eenvoudig. De truc is om simpelweg de “.exe” toe te voegen aan je compilerspad. Dus, in plaats van:

SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc)

Het zou

. moeten zijn

SET(CMAKE_C_COMPILER C:/MinGW/bin/gcc.exe)

Hetzelfde geldt voor g++.

Other episodes