web-dev-qa-db-fra.com

Comment basculer entre GCC et Clang dans Clion à partir de CMakeLists.txt en utilisant windows/cygwin

Je mets

 set(CMAKE_CXX_COMPILER           "/usr/bin/clang.exe")

Exécuter/Nettoyer, Exécuter/Construire.

Je reçois des erreurs de lien comme:

undefined reference to `std::ios_base::Init::~Init()'
: undefined reference to `__gxx_personality_v0'

Vraisemblablement, il y a d'autres variables à changer. J'ai essayé d'ajouter -lstdc++ à CMAKE_CXX_FLAGS, mais sans aucune différence.

Existe-t-il une méthode CLion par opposition à une méthode CMake, par exemple?

Merci.

10
jkj yuio

Spécifier un compilateur avec CMake est un peu délicat. Bien que la méthode que vous utilisez, définir CMAKE_CXX_COMPILER dans CMakeLists.txt fonctionne, c’est la méthode la moins recommandée dans le CMake FAQ .

CLion prend en charge la méthode 2 de CMake FAQ : en utilisant -D dans l'invocation de cmake. La définition des variables dans CMakeLists.txt n'a aucun effet.

Sur Mac, allez à Preferences

Sous Linux/Windows, accédez à File | Settings

puis Build, Execution, Deployment | CMake | CMake options et entrez le texte:

-D CMAKE_C_COMPILER=/path/to/c_compiler
-D CMAKE_CXX_COMPILER=/path/to/c++_compiler

Voir le CLion FAQ pour plus de détails.

Notez également que lorsque vous modifiez les compilateurs, vous devrez invalider le cache CLion cmake et redémarrer, voir ma réponse sur Comment effacer le cache CMake dans Clion? .

MODIFIER

Après avoir écrit cette réponse, CLion a ajouté la prise en charge de plusieurs répertoires de construction, comme l'a souligné @rubenvb dans les commentaires. C'est un autre chemin à explorer.

13
marco.m

En fait, la dernière version de Clions 2018.2 sous Windows 10 fonctionne avec LLVM clang version 6/6.0.1 ou même 7.0 avec la variante spécifique à GCC mingw x64 win32.

l'éditeur de liens par défaut est défini sur GCC, pas Visual Studio. 

Je suppose que cela devrait également fonctionner sur cygwin avec la même configuration que celle qui suit a également été testée pour fonctionner sur un certain nombre de c ++ IDE populaires également.

la version de GCC mingw x64 ou 32 spécifique a été testée pour fonctionner sur Clions 2018.2

\ mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0 ou mingw-w64\i686-8.1.0-win32-dwarf-rt_v6-rev0

CMake construction comme ci-dessous

cmake_minimum_required(VERSION 3.10)
project(project_name )

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_C_COMPILER "c:/llvm/bin/clang.exe")
set(CMAKE_CXX_COMPILER "c:/llvm/bin/clang++.exe")
// target i686-pc-windows-gnu for 32bit 
set(CL_COVERAGE_COMPILE_FLAGS "-v -target x86_64-pc-windows-gnu -Wall -Wextra -std=gnu++17")
set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${CL_COVERAGE_COMPILE_FLAGS}" )
add_executable(project_name   yourcpp.cpp)