Как переключаться между 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)