如何使用windows / cygwin从CMakeLists.txt中切换Clion中的GCC和Clang

时间:2015-05-22 14:43:22

标签: c++ gcc clang clion

我把

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

运行/清洁,运行/构建。

我收到链接错误,如:

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

据推测,还有其他变量需要改变。尝试将-lstdc++添加到CMAKE_CXX_FLAGS,但没有不同。

例如,是否存在CLion方式而不是CMake方式?

感谢。

2 个答案:

答案 0 :(得分:13)

使用CMake指定编译器有点脆弱。虽然您使用的方法在CMakeLists.txt中设置CMAKE_CXX_COMPILER,但它是CMake FAQ中推荐最少的方法。

CLion支持CMake FAQ的方法2:在cmake调用中使用-D。在CMakeLists.txt中设置变量无效。

在Mac上,转到Preferences

在Linux / Windows上,转到File | Settings

然后Build, Execution, Deployment | CMake | CMake options并输入文字:

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

有关详细信息,请参阅CLion FAQ

另请注意,更改编译器时,必须使CLion cmake缓存无效并重新启动,请参阅How to clear CMake cache in Clion?上的答案。

修改

在我写完这个答案后,CLion添加了对多个构建目录的支持,正如@rubenvb在评论中指出的那样。这是另一种调查途径。

答案 1 :(得分:0)

事实上,在Windows 10环境中运行的最新版本的Clions 2018.2可与LLVM clang版本6 /6.0.1甚至7.0以及GCC mingw x64 win32特定变体一起使用。

链接器默认设置为GCC,而不是Visual Studio

我想它也可以在cygwin上使用相同的设置,因为以下设置也经过测试,也可以在许多流行的c ++ IDE上使用。

x64或32个特定的GCC mingw版本经过测试可在Clions 2018.2上运行

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

CMake构建设置如下

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)