Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to switch between GCC and Clang in Clion from within CMakeLists.txt using windows/cygwin

Tags:

c++

gcc

clang

clion

I put

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

Run/Clean, Run/Build.

I get link errors like:

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

Presumably there are other variables to change. Tried adding -lstdc++ to CMAKE_CXX_FLAGS, but no different.

Is there a CLion way as opposed to a CMake way, for example?

Thanks.

like image 284
jkj yuio Avatar asked May 22 '15 14:05

jkj yuio


People also ask

How do I switch from GCC to clang?

If you want to use clang instead of GCC, you can add -DCMAKE_C_COMPILER=/path/to/clang -DCMAKE_CXX_COMPILER=/path/to/clang++ . You can also use ccmake , which provides a curses interface to configure CMake variables.

How do I change GCC in CLion?

Change toolchain compilersGo to Settings / Preferences | Build, Execution, Deployment | Toolchains and select the toolchain you want to edit.


1 Answers

Specifying a compiler with CMake is a bit delicate. Although the method you are using, setting CMAKE_CXX_COMPILER in CMakeLists.txt works, it is the least-recommended way in the CMake FAQ.

CLion supports method 2 of the CMake FAQ: using -D within the cmake invocation. Setting the variables in CMakeLists.txt has no effect.

On Mac, go to Preferences

On Linux/Windows, go to File | Settings

then Build, Execution, Deployment | CMake | CMake options and enter the text:

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

See the CLion FAQ for details.

Note also that when you change compilers, you will have to invalidate the CLion cmake cache and restart, see my answer on How to clear CMake cache in Clion?.

EDIT

After I wrote this answer, CLion added support for multiple build directories, as pointed out by @rubenvb in the comments. This is another path to investigate.

like image 172
marco.m Avatar answered Sep 28 '22 06:09

marco.m