Как переключаться между GCC и Clang в Clion из CMakeLists.txt с помощью windows/cygwin

Я кладу

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

Run/Clean, Run/Build.

Я получаю ссылки ошибки, такие как:

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

Предположительно есть другие переменные, которые нужно изменить. Пробовал добавлять -lstdc++ в CMAKE_CXX_FLAGS, но не отличается.

Есть ли способ CLion, в отличие от способа CMake, например?

Благодарю.

2 ответа

Задать компилятор с CMake немного деликатно. Хотя метод, который вы используете, установка CMAKE_CXX_COMPILER в CMakeLists.txt работает, это наименее рекомендуемый способ в FAQ CMake.

CLion поддерживает метод 2 из CMake FAQ: использование -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 FAQ для деталей.

Также обратите внимание, что когда вы меняете компиляторы, вам придется сделать недействительным кеш CLion cmake и перезапустить, см. Мой ответ на Как очистить кеш CMake в Clion?,

РЕДАКТИРОВАТЬ

После того, как я написал этот ответ, CLion добавил поддержку нескольких каталогов сборки, на что указывает @rubenvb в комментариях. Это еще один путь для расследования.

Фактически последняя версия 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 конкретная версия MCCW для GCC, протестированная для работы на 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)
Другие вопросы по тегам