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

jkj yuio picture jkj yuio · May 22, 2015 · Viewed 18.8k times · Source

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.

Answer

marco.m picture marco.m · Feb 18, 2016

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.