Каковы различия между C ++ Toolchains и компиляторами? - PullRequest
1 голос
/ 05 марта 2020

Я знаю, что есть много компиляторов, таких как gcc, clang, ninja, но я продолжаю слышать о "Toolchains" и так далее, но я не понимаю, что это такое, как "gnu-toolchain" и др c

Ответы [ 3 ]

4 голосов
/ 05 марта 2020

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

3 голосов
/ 05 марта 2020

Я знаю, что есть много компиляторов, таких как g cc, clang, ninja

ninja не является компилятором. Это инструмент автоматизации сборки или «система сборки». Инструмент автоматизации сборки считывает конфигурацию и генерирует необходимые команды для вызова инструментов цепочки инструментов, необходимых для сборки программы.

Так, например, CMake - это что?

CMake - это язык конфигурации и программа, которая генерирует конфигурацию для инструмента автоматизации сборки (например, ниндзя).

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

В чем различия между инструментальными цепочками C ++ и компиляторами?

Набор инструментов - это набор инструментов, необходимых для преобразования ваших исходных файлов в исполняемый файл (или библиотеку) и его запуска.

Компилятор - это один из инструментов, который содержит набор инструментов. Задача компилятора - взять исходный файл в качестве аргумента и создать код сборки для целевой системы - хотя это представление немного устарело: с оптимизацией по времени компиляции компилятор вместо этого создает язык «промежуточного представления».

как "gnu-toolchain"

Набор инструментов GNU - это набор инструментов, который использует компилятор GNU, т.е. G CC.

Так Что содержит Toolchain?

Может зависеть от контекста, но типично следующее:

Фаза перевода:

  • компилятор
  • ассемблер
  • компоновщик

Фаза выполнения:

  • Dynami c Загрузчик
  • Отладчик
  • Профилировщик

В цепочку инструментов также могут входить другие инструменты, такие как:

  • инструменты автоматизации сборки
  • стандартная библиотека
  • макропроцессоры
  • архиваторы
  • менеджеры пакетов

А м любые другие небольшие инструменты, которые может использовать программист.

1 голос
/ 05 марта 2020

Есть несколько важных терминов:

  1. Компилятор: инструмент, который преобразует ваш код в скомпилированный двоичный формат. Обычно это включает в себя этап ассемблера, который строго не является компилятором. Кроме того, инструменты, которые вы вызываете, часто являются «драйверами» для серверной части компилятора / ассемблера / компоновщика, и вы вызываете их для каждого шага процесса сборки (включая компоновку). Примеры: gcc / g++, clang / clang++, cl, icc / icpc, ...

  2. Ассемблер: сборка двоичного кода генерируется компилятором в заданном формате c объектный файл (файлы .obj для Visual Studio, файлы .o для почти всего остального). Это часто встроено или, по крайней мере, вызывается компилятором при генерации объектных файлов из исходного кода. Например, as, ...

  3. Компоновщик: связывает вместе объектные файлы в формате исполняемого файла. Это может быть либо общая библиотека (.dll / .dylib / .so), либо исполняемое приложение (.exe). Примерами являются ld, link, lld, ...

    (3a) «Библиотекарь»: инструмент Unix ar или инструмент Visual studio lib.exe. Это просто объединяет объектные файлы в тонкий формат оболочки (.a / .lib).

  4. Отладчик: инструмент, используемый для проверки значений переменных, определенных в исходном коде во время выполнения. Примеры: gdb, lldb, windbg, ...

  5. Набор инструментов: все вышеперечисленное объединено вместе. Отладчик может или не может рассматриваться как часть этого.

  6. Инструмент сборки: инструмент, который вызывает инструменты набора инструментов для преобразования коллекции исходных файлов в одну или несколько библиотек и исполняемых файлов. Например, make, ninja, msbuild, xcode-build, ...

  7. Генератор проекта: принимает "абстрактное" описание проекта и отношение исходных файлов. к выходным файлам и генерирует что-то, что инструмент сборки и / или IDE может использовать, как если бы проект был собран внутри этой IDE Это делает кроссплатформенную разработку намного менее болезненной, если все сделано правильно. Примерами являются cmake, qmake, premake, ...

  8. IDE: текстовый редактор с различными уровнями языковых аннотаций, навигации по коду и интеграции цепочек инструментов. Часто вы можете загружать файлы проекта, искать символы, строить, отлаживать и т. Д. c. все из одной IDE. Примерами являются Visual Studio, Qt Creator, KDevelop, Xcode, Eclipse, Code :: Blocks, ... и с соответствующим массивом плагинов: Vim, Emacs, VSCode, Atom, Sublime Text, ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...