Можно ли на clang++ написать десктоп?
Недавно перешёл с C# на C++, набрался там много практики по ООП, паттернам, информатике и т.д. Я скачал компилятор clang++, с консольными приложениями работает очень хорошо. Теперь пытаюсь создать проект, используя wxWidgets. Ограничивается ли этот фреймворк конкретными компиляторами, а если подробнее: можно ли на clang++ собрать wxWidgets проект?
Ответы (1 шт):
Clang на Windows обычно ставится в пару к другому компилятору - к MinGW GCC или к MSVC (компилятор от Visual Studio), и использует некоторые библиотеки от них. Оффициальная сборка Clang-а по умолчанию использует MSVC, так что если она у вас работает, значит MSVC уже стоит.
Как ставить библиотеки - ищите инструкцию для MinGW или MSVC, и повторяйте то же самое с Clang-ом.
Раз вы не пользуетесь Visual Studio, то зависеть от MSVC выглядит странно. Я бы советовал поставить MinGW из MSYS2.
Сносите оффициальный кланг.
Ставите MSYS2 по ссылке выше.
Запускаете его ярлыком
MSYS2 UCRT64. Если сделано правильно, в открышейся консоли будет написаноUCRT64фиолетовыми буквами. (подробнее тут)Обновляетесь командой
pacman -Syuu. Если при этом консоль закроется - открыть заново и повторить команду для завершения обновления.Ставите себе Clang (эта версия по умолчанию использует библиотеки от MinGW), GDB (отладчик), и wxWidgets.
pacman -S mingw-w64-ucrt-x86_64-clang mingw-w64-ucrt-x86_64-wxwidgets3.2-msw mingw-w64-ucrt-x86_64-gdbТеперь пробуем собрать пример отсюда (полный код в самом конце статьи).
clang++ my_code.cpp `wx-config --cxxflags --libs`Обратите внимание на обратные кавычки. Это запускает команду
wx-config --cxxflags --libs, и подставляет ее вывод как флагиclang++.Запускаем получившийся файл командой
./a.exe, и видим тестовое окно.У меня при компиляции вылезла куча странных предупреждений. Глушим их.
Для этого в примере находим
#include <wx/wx.h>, и обкладываем его вот так:#ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wignored-attributes" #endif #include <wx/wx.h> #ifdef __clang__ #pragma clang diagnostic pop #endifПерезапускаем компиляцию и убеждаемся в отсутсвии предупреждений.
Пробуем запустить
a.exeне из MSYS2, а мышкой из проводника. Скорее всего ничего не запустится, пока вы не добавитеC:\msys64\ucrt64\binпервым элементом в PATH.Теперь повторяем то же самое из CodeBlocks.
Лезем в настройки, и исправляем путь до компилятора. Он должен показывать на содержимое папки
C:\msys64\ucrt64\bin. То же самое с путем до отладчика.В настройки проекта вписываем флаги компилятора. В
compiler flags -> otherвыводwx-config --cxxflags, а вlinker flags -> otherвыводwx-config --libs.Пробуем скомпилировать и запустить из CodeBlocks.