web-dev-qa-db-fra.com

Comment faire en sorte que CMake utilise GCC au lieu de Clang sous Mac OS X?

Je ne trouve aucune information à ce sujet, mais seulement l’inverse (par exemple, comment configurer CMake pour utiliser Clang).

J'ai installé gcc-4.8 en utilisant brew, configuré toutes les dépendances, les en-têtes, etc., et maintenant, CMake refuse d'utiliser gcc.

J'ai défini mon profil bash avec les deux alias et les entrées réelles:

export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'

Cependant, CMake refuse obstinément d’utiliser gcc et retourne à la normale:

air:build alex$ cmake -DCMAKE_BUILD_TYPE=DEBUG ..
-- The C compiler identification is Clang 5.1.0
-- The CXX compiler identification is Clang 5.1.0
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
52
Ælex

CMake n'écoute pas (toujours) CC et CXX. Utilisez plutôt CMAKE_C_COMPILER et CMAKE_CXX_COMPILER:

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ...

Voir aussi le documentation .

Alternativement, vous pouvez fournir un fichier de chaîne d'outils , mais cela pourrait être excessif dans ce cas.

76
rubenvb

Les versions actuelles de CMake ne respectent pas les variables d'environnement CC et CXX comme on pourrait s'y attendre. Plus précisément, s’il s’agit de chemins absolus vers les fichiers binaires du compilateur, ils semblent être ignorés. Sur mon système avec un cmake fraîchement compilé 3.7.1, je dois faire cmake -H. -Bbuild -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX.

Comme d'autres l'ont déjà indiqué, ce n'est pas une bonne idée d'imposer un choix de compilateur dans votre fichier CMakeLists.txt. Toutefois, si cela est nécessaire pour votre cas d'utilisation, voici comment procéder:

cmake_minimum_required(VERSION 3.5) # Or whatever version you use

# THIS HAS TO COME BEFORE THE PROJECT LINE
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# THIS HAS TO COME BEFORE THE PROJECT LINE

project(my_project VERSION 0.0.0 LANGUAGES C CXX)

Dans ce cas, cmake échouera si le compilateur indiqué n'est pas trouvé. Notez que vous devez définir ces variables avant la ligne de projet car cette commande permet de rechercher et de configurer les compilateurs.

8
Norman B. Lancaster

Juste pour ajouter qu’il existe également une variable CMake "CMAKE_Fortran_COMPILER" à récupérer GNU Fortran plutôt que clang fortran. Mais il semble manquer à la documentation

cmake -DCMAKE_Fortran_COMPILER =/usr /.../ bin/gfortran-6.x.0

1
user3800155