Я знаю, что есть много компиляторов, таких как g cc, clang, ninja
ninja не является компилятором. Это инструмент автоматизации сборки или «система сборки». Инструмент автоматизации сборки считывает конфигурацию и генерирует необходимые команды для вызова инструментов цепочки инструментов, необходимых для сборки программы.
Так, например, CMake - это что?
CMake - это язык конфигурации и программа, которая генерирует конфигурацию для инструмента автоматизации сборки (например, ниндзя).
Причина использования такого генератора заключается в том, что у вас есть возможность использовать любую систему сборки (поддерживаемую генератор), что важно, потому что не все системы поддерживают все системы сборки. Другой причиной создания системного генератора является обнаружение возможностей системы и используемого набора инструментов и использование этой информации для изменения конфигурации.
В чем различия между инструментальными цепочками C ++ и компиляторами?
Набор инструментов - это набор инструментов, необходимых для преобразования ваших исходных файлов в исполняемый файл (или библиотеку) и его запуска.
Компилятор - это один из инструментов, который содержит набор инструментов. Задача компилятора - взять исходный файл в качестве аргумента и создать код сборки для целевой системы - хотя это представление немного устарело: с оптимизацией по времени компиляции компилятор вместо этого создает язык «промежуточного представления».
как "gnu-toolchain"
Набор инструментов GNU - это набор инструментов, который использует компилятор GNU, т.е. G CC.
Так Что содержит Toolchain?
Может зависеть от контекста, но типично следующее:
Фаза перевода:
- компилятор
- ассемблер
- компоновщик
Фаза выполнения:
- Dynami c Загрузчик
- Отладчик
- Профилировщик
В цепочку инструментов также могут входить другие инструменты, такие как:
- инструменты автоматизации сборки
- стандартная библиотека
- макропроцессоры
- архиваторы
- менеджеры пакетов
А м любые другие небольшие инструменты, которые может использовать программист.