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 方式?

谢谢。

4

2 回答 2

13

使用 CMake 指定编译器有点微妙。尽管您使用的方法在 CMakeLists.txt 中设置 CMAKE_CXX_COMPILER 有效,但它是CMake FAQ中最不推荐的方法。

CLion 支持CMake FAQ的方法 2 :-D在 cmake 调用中使用。在 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 常见问题解答

另请注意,当您更改编译器时,您将不得不使 CLion cmake 缓存无效并重新启动,请参阅我关于如何在 Clion 中清除 CMake 缓存的答案?.

编辑

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

于 2016-02-18T21:45:42.817 回答
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)
于 2018-08-02T05:43:36.860 回答