Подтвердить что ты не робот

Почему clang выбирает установку gcc?

Команда "clang -v" печатает:

$ clang -v
clang version 3.4 (tags/RELEASE_34/final)
Target: i386-redhat-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2
Found candidate GCC installation: /usr/lib/gcc/i686-redhat-linux/4.8.2
Selected GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2

Что означает, что "clang выбирает gcc installatiom"? Зачем? Clang не зависит от gcc или нет?
Благодарим за помощь.

EDIT:
Я нашел, вероятно, общий ответ (я использую Fedora 20) на странице
  https://bbs.archlinux.org/viewtopic.php?id=129760

4b9b3361

Ответ 1

Clang использует несколько настроек из компилятора хоста, если для этого хоста есть другой компилятор по умолчанию (clang по умолчанию используется для Apple OSX/macOS и для вариантов FreeBSD). Полезно получить большую совместимость с другими бинарниками и библиотеками ОС.

Он часто использует host binutils (для компоновщика и ассемблера), компилятор хоста для файлов crt и внутренних заголовков компиляторов и библиотеки С++ для совместимости ABI в программах и библиотеках на С++.

Выбор инструментальной цепочки является частью драйвера clang (команда clang), реализованного в https://github.com/llvm-mirror/clang/blob/master/lib/Driver/ToolChains.cpp файле.

В Clang "Дизайн драйверов и внутренних компонентов" есть документация, http://clang.llvm.org/docs/DriverInternals.html

компилированные инструменты

Драйвер gcc не имеет прямого понимания цепей инструментов. Каждый gcc-бинарный пример примерно соответствует информации, встроенной внутри одного ToolChain.

Драйвер clang предназначен для переносимости и поддержки сложных сред компиляции. Весь код платформы и инструментальной цепочки должен быть защищен за абстрактными или четко определенными интерфейсами (например, поддерживает ли платформа поддержка драйверов).

Привязка: выбор инструмента и файла.  По идее, драйвер выполняет совпадение сверху вниз, чтобы назначить Action (s) для инструментов. ToolChain отвечает за выбор инструмента для выполнения определенного действия; после выбора драйвера взаимодействует с инструментом, чтобы увидеть, может ли он соответствовать дополнительным действиям (например, с помощью встроенного препроцессора).

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

Результаты этого этапа не вычисляются напрямую, но драйвер может распечатать результаты с помощью опции -ccc-print-bindings. Например:

$ clang -ccc-print-bindings -arch i386 -arch ppc t0.c
# "i386-apple-darwin9" - "clang", inputs: ["t0.c"], output: "/tmp/cc-Sn4RKF.s"
# "i386-apple-darwin9" - "darwin::Assemble", inputs: ["/tmp/cc-Sn4RKF.s"], output: "/tmp/cc-gvSnbS.o"
# "i386-apple-darwin9" - "darwin::Link", inputs: ["/tmp/cc-gvSnbS.o"], output: "/tmp/cc-jgHQxi.out"
# "ppc-apple-darwin9" - "gcc::Compile", inputs: ["t0.c"], output: "/tmp/cc-Q0bTox.s"
# "ppc-apple-darwin9" - "gcc::Assemble", inputs: ["/tmp/cc-Q0bTox.s"], output: "/tmp/cc-WCdicw.o"
# "ppc-apple-darwin9" - "gcc::Link", inputs: ["/tmp/cc-WCdicw.o"], output: "/tmp/cc-HHBEBh.out"
# "i386-apple-darwin9" - "darwin::Lipo", inputs: ["/tmp/cc-jgHQxi.out", "/tmp/cc-HHBEBh.out"], output: "a.out"

Здесь показана цепочка инструментов, инструмент, входы и выходы, которые были связаны для этой последовательности компиляции. Здесь clang используется для компиляции t0.c в архитектуре i386, а специальные версии инструментов darwin используются для сборки и связывания результата, но общие версии gcc для этих инструментов используются в PowerPC.