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

я кладу

 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?

Спасибо.


person jkj yuio    schedule 22.05.2015    source источник
comment
Попробуйте использовать --stdlib=libstdc++ с clang.   -  person arrowd    schedule 22.05.2015
comment
компилятор C++ называется clang++, вы используете компилятор C   -  person Petesh    schedule 22.05.2015
comment
Пожалуйста, не используйте компиляторы жесткого кода в CMakeLists.txt. Вместо этого используйте параметры командной строки -DCMAKE_CXX_COMPILER=... и -DCMAKE_C_COMPILER=....   -  person rubenvb    schedule 03.08.2018


Ответы (2)


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

CLion поддерживает метод 2 из часто задаваемых вопросов по CMake: использование -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 и перезапустить его, см. мой ответ на Как очистить кеш CMake в Клион?.

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

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

person marco.m    schedule 18.02.2016
comment
Могут возникнуть проблемы с работой в последней версии CLion: youtrack.jetbrains.com/issue /CPP-7800 - person phoenix; 18.11.2016
comment
Обратите внимание, что у вас может быть два отдельных каталога сборки (по одному на компилятор), поэтому переключение становится намного менее болезненным, и при каждом переключении не требуется полная перестройка. - person rubenvb; 28.11.2016
comment
Вместо того, чтобы писать путь для меня, это сработало, если бы я просто написал clang. (написание пути у меня не сработало). - person Mark; 11.04.2017

На самом деле последняя версия Clions 2018.2, работающая в среде Windows 10, работает с LLVM clang версии 6/6.0.1 или даже 7.0 вместе со специальным вариантом GCC mingw x64 win32.

по умолчанию для компоновщика установлено значение GCC, а не Visual Studio

Я предполагаю, что он должен работать и на cygwin с той же настройкой, что и следующая, также протестированная для работы с рядом популярных IDE С++.

Специальная версия mingw GCC для x64 или 32 протестирована для работы на 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)
person TSG anti SO dark forces    schedule 02.08.2018