Можно ли на clang++ написать десктоп?

Рейтинг: 1Ответов: 1Опубликовано: 12.04.2023

Недавно перешёл с C# на C++, набрался там много практики по ООП, паттернам, информатике и т.д. Я скачал компилятор clang++, с консольными приложениями работает очень хорошо. Теперь пытаюсь создать проект, используя wxWidgets. Ограничивается ли этот фреймворк конкретными компиляторами, а если подробнее: можно ли на clang++ собрать wxWidgets проект?

Ответы

▲ 3Принят

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.