web-dev-qa-db-ja.com

windows / cygwinを使用してCMakeLists.txt内からClionでGCCとClangを切り替える方法

置いた

 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の方法はありますか?

ありがとう。

10
jkj yuio

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キャッシュを無効にして再起動する必要があることにも注意してください。 ClionでCMakeキャッシュをクリアする方法 に関する私の回答を参照してください。

編集

この回答を書いた後、コメントで@rubenvbが指摘しているように、CLionは複数のビルドディレクトリのサポートを追加しました。これは調査するもう1つの方法です。

13
marco.m

実際、Windows10環境で実行されているClions2018.2の最新バージョンは、LLVMclangバージョン6/6.0.1または7.0とGCCmingw x64win32固有のバリアントで動作します。

リンカーのデフォルトは、VisualStudioではなくGCCに設定されています

以下と同じセットアップでcygwinでも動作するはずですが、多くの一般的なc ++ IDEでも動作するようにテストされています。

clions2018.2で動作するようにテストされたx64または32固有のGCCmingwバージョン

\ 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)