web-dev-qa-db-fra.com

Impossible de spécifier le compilateur avec CMake

J'ai un problème avec ce fichier 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)

L'appel de cmake avec: cmake -G "MinGW Makefiles", il échoue avec la sortie suivante:

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!

Cependant, le compilateur gcc est dans C:/MinGW/bin/ et cela fonctionne.

Une idée?

Plate-forme:

  • Windows 7 
  • MinGW/GCC 4.6 
29
Pietro

N'essayez jamais de définir le compilateur dans le fichier CMakeLists.txt.

Voir CMake FAQ pour savoir comment utiliser un compilateur différent:

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

(Notez que vous essayez la méthode n ° 3 et que la FAQ dit "(à éviter)" ...)

Nous vous recommandons d'éviter la technique "dans les CMakeLists" car elle pose des problèmes lorsqu'un compilateur différent était utilisé pour une première configuration, puis que le fichier CMakeLists était modifié pour essayer de définir un compilateur différent ... Et parce que l'intention du fichier CMakeLists devrait être de travailler avec plusieurs compilateurs, selon les préférences du développeur utilisant CMake.

La meilleure méthode consiste à définir les variables d'environnement CC et CXX avant d'appeler CMake pour la toute première fois dans un arbre de construction.

Une fois que CMake a détecté les compilateurs à utiliser, il les enregistre dans le fichier CMakeCache.txt afin qu'il puisse toujours générer les systèmes de construction appropriés même si ces variables disparaissent de l'environnement ...

Si vous avez besoin de changer de compilateur, vous devez commencer par un nouvel arbre de compilation.

52
DLRdave

J'ai eu le même problème que Pietro,

Je suis sous Windows 10 et j'utilise "Git Bash" . J'ai essayé d'exécuter >> cmake -G "MinGW Makefiles", mais j'ai la même erreur que Pietro.

Ensuite, j'ai essayé >> cmake -G "MSYS Makefiles", mais je me suis rendu compte que je devais configurer correctement mon environnement.

Assurez-vous de définir un chemin d'accès à C:\MinGW\msys\1.0\bin et vérifiez si vous avez gcc.exe à cet emplacement. Si gcc.exe n'y est pas, vous devez exécuter C: /MinGW/bin/mingw-get.exe et installer gcc à partir de MSYS.

Après ça marche bien pour moi

4
junghyun jun

L'utilisation de l'option FILEPATH pourrait fonctionner:

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

J'ai eu le même problème. Et dans mon cas, la solution était assez simple. L'astuce consiste simplement à ajouter le ".exe" au chemin de votre compilateur. Donc, au lieu de:

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

CA devrait etre 

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

La même chose s'applique pour g ++.

0
Joel