如何在Windows/Cygwin中使用CMakeLists.txt在Clion中切换GCC和Clang

11

我放置了。

 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方式,例如?

谢谢。


尝试在clang中使用--stdlib=libstdc++ - arrowd
2
C++ 编译器被称为 clang++,你正在使用 C 编译器。 - Anya Shenanigans
请不要在 CMakeLists.txt 中硬编码编译器。请使用命令行选项 -DCMAKE_CXX_COMPILER=...-DCMAKE_C_COMPILER=... - rubenvb
2个回答

13

使用 CMake 指定编译器需要小心,虽然在 CMakeLists.txt 中设置 CMAKE_CXX_COMPILER 的方法可行,但它是 CMake FAQ 中最不推荐的方式。

CLion 支持 CMake FAQ 的第二种方法:在 cmake 调用中使用 -D。在 CMakeLists.txt 中设置变量没有任何效果。

在 Mac 上,转到 偏好设置

在 Linux/Windows 上,转到 文件 | 设置,然后转到 构建、执行、部署 | CMake | CMake 选项 并输入以下文本:

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

详情请查看CLion常见问题解答(FAQ)

另外,请注意当您更改编译器时,您需要使CLion的cmake缓存无效并重新启动,具体请参见我的答案:如何在Clion中清除CMake缓存?

编辑

在我撰写本答案后,CLion添加了对多个构建目录的支持,正如评论中@rubenvb所指出的那样。这是另一条可以探索的途径。


在最新版本的CLion中可能会出现问题,无法正常工作:https://youtrack.jetbrains.com/issue/CPP-7800 - phoenix
请注意,您可以拥有两个单独的构建目录(每个编译器一个),因此切换变得不那么痛苦,并且每次切换时不需要进行完整的重建。 - rubenvb
不是写路径,而是直接写“clang”,这样对我起作用了。(写路径对我没用) - Mark

0

事实上,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-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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接