Как установить clang на windows

Обновлено: 06.07.2024

  1. идём на страницу проекта MSYS2
  2. скачиваем программу
  3. устанавливаем
  4. запускаем MSYS2 с ярлыка из меню Пуск -> MSYS2 32bit -> MinGW-w64 Win32 Shell
  5. открывается окошко терминала (консоли)
  6. в нём печатаем:

pacman --needed -S bash pacman pacman-mirrors msys2-runtime
  1. открываем Code::Blocks
  2. идём в Settings -> Compiler
  3. открывается окно Global Compiler Settings
  4. в выпадающем меню Selected compiler выбираем LLVM Clang Compiler
  5. переходим во вкладку Search Directories
  6. видим там три дополнительные вкладки: Compiler, Linker, Resource compiler
  7. нам нужна первая их этих трёх
  8. переходим в неё, жмём кнопку Add
  9. в выскочившем окошке вбиваем путь c:\msys32\mingw32\include\
  10. жмём OK
  11. видим рядом с вкладкой Search Directories вкладку под названием Toolchain executables
  12. переходим в неё
  13. окошке Compiler's installation directory прописываем путь C:\msys32\mingw32
  14. жмём OK

  1. идём на страницу проекта MSYS2
  2. скачиваем MSYS2 для 64-битной винды
  3. устанавливаем
  4. запускаем MSYS2 с ярлыка из меню Пуск -> MSYS2 64bit -> MinGW-w64 Win64 Shell
  5. открывается окошко терминала (консоли)
  6. в нём печатаем:

pacman --needed -S bash pacman pacman-mirrors msys2-runtime
  1. открываем Code::Blocks
  2. идём в Settings -> Compiler
  3. открывается окно Global Compiler Settings
  4. в выпадающем меню Selected compiler выбираем LLVM Clang Compiler
  5. переходим во вкладку Search Directories
  6. видим там три дополнительные вкладки: Compiler, Linker, Resource compiler
  7. нам нужна первая их этих трёх
  8. переходим в неё, жмём кнопку Add
  9. в выскочившем окошке вбиваем путь c:\msys64\mingw64\include\
  10. жмём OK
  11. видим рядом с вкладкой Search Directories вкладку под названием Toolchain executables
  12. переходим в неё
  13. окошке Compiler's installation directory прописываем путь C:\msys64\mingw64
  14. жмём OK
Еще бы надо прописать разницу между msys2 и msys2-base.
А то не совсем ясно, какую качать.

Ужас.
Столько действий что бы просто добавить компилятор Clang в Code::Blocks !
Да еще попробуй сам сделай ! Без помощи не риально !
MSYS2 32bit загрузила больше 1 гига всякой гадости.
Ставилось минут 20.
Решил посмотреть размер папки MSYS2. Размер был скромный ! 3 гига 148 метров.
На трёхдюймовую дискету как раз влезает ))

Мягко говоря не приятное впечатление от всего этого безобразия и установки Clang в Code::Blocks.
Мрак.

Решил проверить как работает Clang в Code::Blocks и скомпилить с++:

Выдало:
||=== Build: Release in console (compiler: LLVM Clang Compiler) ===|
||warning: argument unused during compilation: '-s' [-Wunused-command-line-argument]|
||error: linker command failed with exit code 1104 (use -v to see invocation)|
||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

PS: Моей радости не было конца и края ! А веселые и задорные слова сами вырывались из уст !

Для себя сделал вывод.
Или ставить Code blocks с mingw (будет 300 метров)
Или не мучатся и ставить сразу Visual studio 2014 (она к стати делает Release exe малого размера ).
Visual studio 2014 установленная весит 3 гига 600 метров.

PS: Code blocks можно запутаться когда стоят разные версии того же Clang. Это создает много лишних телодвижений.

Нафига Вам вообще сдались кодеблохи и минГиви ? Вот смысл?
Как по мне лучше использовать QtCreator + Qt + MSVC. И гуи и консоль и меньше мороки с прикручиванием других либ.

Я например скачав 300 метров Code::Blocks подумал как классно.
И думал что clang так же легко и быстро прикрутить к Code::Blocks
А оно вон как вышло.

Так что я купился на малый размер Code::Blocks и быструю установку.
А потом начались сюрпризы.


LLVM — это набор «кирпичиков» для построения компиляторов, а clang — новый компилятор C++ на его основе. По сравнению с gcc — обеспечивается большая скорость компиляции при сравнимом качестве кода, более человеко-понятные исходники т.к. они не несут десятилетия жесточайшей C-only разработки как в gcc.

Помимо этого, Clang и llvm распространяются под лицензией BSD, в отличии от GPLv3 у GCC. BSD позволяет не открывать исходники при распространении исполняемых файлов компилятора.

С LLVM+CLang будет интересно поиграть любому кто когда-либо хотел написать свой компилятор, или считает, что компилятор собранный своими руками дает более теплый бинарный код.

БОльшая часть часть разработчиков llvm/clang используют его под Linux/MacOS — и там его сборка/установка не вызывает каких либо проблем, путь основательно протоптан. А вот в случае windows ситуация несколько осложняется — об обходе нескольких граблей при сборке, о том, что связывает clang и gcc, и какие баги придется фиксить в релизе — под катом.

Существуют 2 основных способа собирать llvm+clang под windows:

CMake позволяет сгенерировать solution для Visual Studio. clang+llvm до сих пор зависит от компонент gcc (стандартной библиотеки например, но работа над устранением зависимости идет), потому даже собирая clang в Visual Studio эта зависимость останется, и у вас получится дичайшая солянка из кусков clang, VS и gcc, где все компоненты со временем будут случайно менять версии. Помимо этого, на данный момент Visual Studio 2012 падает при сборке clang 3.2 с оптимизацией — Microsoft работает над фиксом (в 2010 все ок). В свете этого, я решил Visual Studio не использовать, тем более на конечный результат (clang собранный clang) это не должно особо повлиять.

Mingw32+MSYS. Mingw32 — содержит gcc и тонкую обертку, реализующую linux-подобное окружение для программ, трансляцию путей windows<>linux style. Специфичные функции (вроде fork) полностью не реализованы, потому совместимость хуже чем у cygwin, но работает все быстрее. Частичное описание процесса сборки — на сайте llvm.

MSYS — дает нам «linux» shell, в котором можно запускать стандартные билд-скрипты. Именно по этому пути мы и пойдем.

Запускаем консоль MSYS, качаем исходники llvm, clang, compiler-rt (низкоуровневый системный код для сборки), распаковываем llvm в корень вашей папки с исходниками, clang — в llvm/tools, compiler-rt — в llvm/projects. Проверяем версию gcc — для llvm 3.2 подойдет gcc не новее 4.6.2 (с 4.7.2 у меня он сам себя не смог собрать, но и слишком старый тоже нельзя).

После этого создаем каталог для бинарников, например llvm/bin, переходим туда, и выполняем команду:

После завершения конфигурации — пишем make, и начнется сборка проекта. Когда закончится make — можем сделать make install, и наши скомпилированные бинарники запишутся в каталог newclang в корне файловой системы MSYS.

Далее — самосборка. Она нужна чтобы убедиться, что компилятор работает надежно, мы не упустили каких-либо проблем, и чтобы устранить одну переменную: «версия ксенокомпилятора». Перключаем систему на использование только что собранного clang для дальнейшей сборки им самого себя:


Создаем новый каталог для компиляции, снова запускаем там ../configure… и затем make. Но clang не соберется самим собой так просто, иначе в чем был бы смысл этой статьи?

Скорость работы
Первое что бросается в глаза — собранный clang чудовищно тормозит, и это при релизной сборке! Даже простейший «clang++ --version» может выполнятся несколько секунд. Решение простое: нужно собирать его со статической линковкой, тогда все работает быстро, но ценой увеличенного размера бинарников (десятки мегабайт).

Ошибка «Only alloca-wide stores can be split and recomposed»
Это баг в llvm, который уже пофикшен в репозитории и войдет в 3.3. Но да, релиз clang 3.2 из-за этого не может собрать себя.

Нужно накатить на файл \lib\Transforms\Scalar\SROA.cpp фикс из ревизии svn 170270:

Многопроцессорная сборка зависает
Если вы используете make -j 8 для ускорения сборки — то да, mingw32 может под настроение намертво виснуть в середине сборки, по крайней мере на SSD (нет задержек на обращение к диску — больше шанс встретить какой-нибудь race condition). Решения я не нашел.

clang не может найти стандартные библиотеки
Как мы помним, он использует стандартные библиотеки из gcc. Для того, чтобы он их нашел — они должны быть правильной версии, и лежать в ожидаемом clang-ом месте.

Не падайте со стула, пути для поиска файлов «захардкожены» в файле \tools\clang\lib\Frontend\InitHeaderSearch.cpp. Если у вас MinGW стоит не в папке по умолчанию, clang его точно не найдет. Затем, clang проверяет только некоторые версии gcc для поиска директории с заголовочными файлами, убедитесь что у вас стоит подходящая версия gcc.

Устанавливать пакеты нужной версии в MSYS можно так:

Вот теперь clang сможет собрать сам себя, и вы получите свежий и быстрый, теплый и ламповый, собранный самим собой компилятор.

В Visual Studio 2019 доступна поддержка Clang для проектов CMake и MSBuild.

Visual Studio 2019 версии 16.2 и более поздних версий с Clang можно использовать для изменения, сборки и отладки проектов Visual Studio на C++ (MSBuild), предназначенных для Windows или Linux.

Установка

Для лучшей поддержки интегрированной среды разработки в Visual Studio рекомендуется использовать новейшие средства компилятора Clang для Windows. Если они еще не установлены, их можно установить, открыв Visual Studio Installer и выбрав Средства C++ Clang для Windows в разделе дополнительных компонентов Разработка классических приложений на C++ . Если вы предпочитаете использовать существующую установку Clang на компьютере, выберите необязательный компонент Средства сборки C++ Clang-cl для версии 142. .

Для стандартной библиотеки Microsoft C++ требуется по крайней мере Clang 8.0.0.

Снимок экрана: установщик Visual Studio с выбранной вкладкой "Отдельные компоненты" и видимыми компонентами "С++ Clang".

В позднейших версиях Visual Studio предоставляются более новые версии набора инструментов Clang. Пакетная версия Clang обновляется автоматически, чтобы оставаться актуальной с учетом обновлений в реализации стандартной библиотеки Майкрософт. Например, Visual Studio 2019 версии 16.9 включает Clang версии 11.

Настройка проекта Windows для использования средств Clang

Чтобы настроить использование Clang в проекте Visual Studio, в обозревателе решений щелкните узел проекта правой кнопкой мыши и выберите пункт Свойства. Как правило, сначала следует выбрать элемент Все конфигурации в верхней части диалогового окна. Затем в разделе Общие > Набор инструментов платформы выберите LLVM (clang-cl) и нажмите кнопку ОК.

Если вы используете средства Clang, входящие в состав Visual Studio, никаких дополнительных действий не требуется. Для проектов Windows программа Visual Studio по умолчанию вызывает Clang в режиме clang-cl. Он связывается с реализацией стандартной библиотеки Майкрософт. По умолчанию clang-cl.exe находится в каталогах %VCINSTALLDIR%\Tools\Llvm\bin\ и %VCINSTALLDIR%\Tools\Llvm\x64\bin\ .

Если используется настраиваемая установка Clang, можно изменить свойство Проект > Свойства > Каталоги VC++ > Свойства конфигурации > Каталоги исполняемых файлов, добавив корневой каталог настраиваемой установки Clang в качестве первого каталога, или изменить значение свойства LLVMInstallDir . Дополнительные сведения см. в разделе Задание настраиваемого расположения LLVM.

Настройка проекта Linux для использования средств Clang

Для проектов Linux среда Visual Studio использует интерфейс, совместимый с Clang GCC. Свойства проекта и почти все флаги компилятора идентичны.

Чтобы настроить использование Clang в проекте Visual Studio для Linux, выполните указанные ниже действия.

В Linux среда Visual Studio по умолчанию использует первое расположение Clang, которое встречается в свойстве среды PATH. Если используется настраиваемая установка Clang, измените значение свойства LLVMInstallDir или подставьте путь в свойстве Проект > Свойства > Свойства конфигурации > Каталоги VC++ > Каталоги исполняемых файлов. Дополнительные сведения см. в разделе Задание настраиваемого расположения LLVM.

Задание настраиваемого расположения LLVM

Можно задать настраиваемый путь к LLVM для одного или нескольких проектов, создав файл Directory.build.props. Затем добавьте этот файл в корневую папку любого проекта. Его можно добавить в корневую папку решения, чтобы применить его ко всем проектам в решении. Файл должен выглядеть следующим образом (только с фактическим путем LLVM):

Это свойство можно объединить с пользовательской версией набора инструментов LLVM. Дополнительные сведения см. в разделе Установка пользовательской версии набора инструментов LLVM.

Задание пользовательской версии набора инструментов LLVM

Начиная с Visual Studio 2019 версии 16.9, можно задать пользовательскую версию набора инструментов для LLVM. Чтобы задать это свойство в проекте в Visual Studio, выполните следующие действия:

Перейдите на страницу свойств Свойства конфигурации > Общие.

Измените значение свойства Набор инструментов платформы на LLVM (clang-cl) , если оно еще не задано.

Перейдите на страницу свойств Свойства конфигурации > Расширенные.

Измените свойство Версия инструментов LLVM на предпочитаемую версию, а затем нажмите кнопку ОК, чтобы сохранить изменения.

Свойство Версия набора инструментов LLVM отображается только при выборе набора инструментов платформы LLVM.

Версию набора инструментов можно задать для одного или нескольких проектов, создав файл Directory.build.props. Затем добавьте этот файл в корневую папку любого проекта. Добавьте его в корневую папку решения, чтобы применить его ко всем проектам в решении. Файл должен выглядеть следующим образом (только с фактическим путем LLVM):

Это свойство также можно объединить с пользовательским расположением LLVM. Например, файл Directory.build.props может выглядеть следующим образом:

При добавлении файла Directory.build.props параметры отображаются по умолчанию в диалоговом окне страницы свойств проекта. Однако при изменении этих свойств в Visual Studio они переопределяют параметры в файле Directory.build.props.

Настройка дополнительных свойств, изменение, сборка и отладка

При отладке можно использовать точки останова, память и визуализацию данных, а также большинство других функций отладки.

Что мне конкретно сделать чтобы он видел стандартные заголовки, и не выдавал такие ошибки?


clang под windows использует библиотеки времени выполнения от visual studio. Соответственно, вам нужно поставить visual studio и прописать пути к нему. И вам нужен clang-cl, а не clang++. Также есть вариант вместо visual studio использовать MinGW (GCC).

EDIT: вот проверенный вариант: Для начала нужно скачать Visual C++ 2015 Build Tools, можно попробовать поставить vs 2017, но на данный момент clang не компилирует её заголовочные файлы из-за ошибок в них (точнее, для vs это не ошибки, но стандарту они не соответствуют, про это недавно пост на reddit был). Пакеты можно ставить по минимуму, но нужен windows 10/8 sdk.

Далее нужно поставить clang, если уже установлен - активировать скрипт . \LLVM\tools\msbuild\install (возможно, это не обязательно)

Используемая вами среда разработки уже должна видеть оба компилятора, но для проверки лучше скомпилировать простую программу в консоли. Для этого нужно установить переменные окружения при помощи скрипта, в моём случае это "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 . Теперь можно использовать как cl, так и clang-cl:


18.7k 3 3 золотых знака 22 22 серебряных знака 35 35 бронзовых знаков 2,745 1 1 золотой знак 6 6 серебряных знаков 7 7 бронзовых знаков

Была такая же ошибка. Перед этим устанавливал VS preview 2022 которая завершилась с ошибкой. Удалил все VS и установил заново одну VS 2019 CE.

После этого начало компилироваться так:


66k 154 154 золотых знака 66 66 серебряных знаков 203 203 бронзовых знака

Clang на Windows не самодостаточен. Ему нужны заголовчные файлы, библиотеки, и т. п. от другого компилятора: на выбор GCC (MinGW) или MSVC (Visual Studio).

Поэтому вам нужно установить либо одно, либо другое. Я бы советовал использовать GCC, ради кросс-платформенности (тем же самым способом вы сможете собирать, например на Linux, а также с Linux-а под Windows, если захотите).

Про MSVC рассказывать не буду, там все должно заработать более-менее из коробки.

Если возьмете GCC, то есть несколько вариантов: (отсортированы по удобству, сначала более удобные)

Ставите не официальный Clang, а сборку из MSYS2 (как это делать см. в конце ответа). Он автоматически установит и GCC тоже. Компилируете командами clang и clang++ , они понимают те же параметры что и GCC.

Если вдруг с MSYS2 Clang-ом какие-то проблемы, можно поставить в MSYS2 только GCC, и взять официальную сборку Clang-а. Тогда при каждой компиляции вам нужно добавлять флаг --target=x86_64-w64-windows-gnu (если собираете 32-битное приложение, то замените x86_64 на i686 ). MSYS2 Clang, в отличие от официального, добавляет этот флаг автоматически.

Также, советую попробовать добавлять флаг -fuse-ld=lld при линковке, чтобы использовать Clang-овский родной линковщик LLD (вместо LD, который поставляется с GCC). Он намного быстрее (рекламируют 10-кратное ускорение линковки, у меня было 20-кратное. ).

Во всех трех описанных выше вариантах, Clang будет использовать стандартную библиотеку C++ от GCC (libstdc++). Для интереса можно попробовать родную Clang-овскую стандартную библиотеку (libc++). На винде она начала работать сравнительно недавно, поэтому могут быть какие-то проблемы. Но зато у вас будет работать address sanitizer. В этом случае LLD используется принудительно, и флаг -fuse-ld=lld не нужен. Насколько я знаю, в официальную поставку Clang-а libc++ не входит, поэтому вам нужен MSYS2 Clang. Под это есть отдельная инструкция, см. самый конец ответа.

Как ставить MSYS2:

Запускаете ярлыком "MSYS MinGW 64-bit" (он же C:\msys64\mingw64.exe ). Если сделано правильно, в консоли увидите MINGW64 розовыми буквами. Если запустить консоль MSYS2 другим способом, то компилятор не окажется в PATH.

Обновляетесь командой pacman -Syuu . Если консоль закроется, перезапустите ее и снова введите ту же команду, чтобы закончить обновление.

Рекомендуется время от времени обновляться этой командой.

Дальше ставите нужные вам пакеты, например:

  • GCC: pacman -S mingw-w64-x86_64-gcc (если у вас уже стоит какой-то другой MinGW/GCC, удалите его, чтобы не было никаких проблем)
  • Clang: pacman -S mingw-w64-x86_64-clang (в этом случае GCC должен установиться автоматически)

Искать по всем доступным пакетам можно командой pacman -Ss текст . Обратите внимание, что все компиляторы и библиотеки должны начинаться с mingw-w64-x86_64- . Из пакетов без префиксов можно ставить только консольные утилиты, которые не участвуют в комипляции, а-ля bash , make . (Объяснение см. тут.)

Стоит добавить C:\msys64\mingw64\bin в PATH . Там - все уставновленные в MSYS2 компиляторы.

Если хотите использовать libc++ вместо libstdc++, то некоторые шаги отличаются.

Читайте также: