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

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

本文关键字:cygwin 切换 GCC Clang windows CMakeLists txt      更新时间:2023-10-16

我把

 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,但没有不同。

例如,是否存在与CMake方式相反的CLion方式?

谢谢。

使用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

还请注意,当你改变编译器时,你将不得不使cmake缓存无效并重新启动,参见我的回答如何在cmake中清除cmake缓存?

编辑

在我写下这个答案之后,正如@rubenvb在评论中指出的那样,CLion增加了对多个构建目录的支持。

事实上,最新版本的Clions 2018.2运行在windows 10环境下的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-w64x86_64-8.1.0-win32-seh-rt_v6-rev0或mingw-w64i686-8.1.0-win32- dwarpe -rt_v6-rev0

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)