Является ли g++ компилятором С++ и компоновщиком?

Я смотрел вывод моей сборки в Eclipse. Я перекрестно компилирую для процессора ColdFire. Линия компиляции выглядит так:

m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...

за которым следует еще файл include, очевидные флаги "компилятора" и, наконец, один исходный файл, который я изменил. Следующая строка снова вызывает тот же инструмент:

m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....

Далее следует файл .o, в котором хранятся некоторые .ld файлы и некоторые .a файлы. Это, как представляется, связывает все типы файлов объектов вместе.

В семействе Gnu есть g++ какое-нибудь uber-приложение, которое может определять на основе аргументов, нужно ли его компилировать или связывать? У него есть как встроенные возможности, так и просто отправка компиляции в gcc и привязка к ld, и мой журнал просто не показывает это?

Ответы

Ответ 1

g++ и gcc являются драйверами. Обычно они запускают препроцессор (cpp), собственно компилятор (cc1plus для С++ и cc1 для C) и компоновщик (золото или GNU ld) и все другие необходимые вещи. Разница между gcc и g++ заключается в том, что последняя включает в себя одну дополнительную библиотеку для привязки к (libstdc++).

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

Если вы передадите им -###, вы увидите, что он печатает инструменты, которые он вызывает на каждом этапе его выполнения.

Ответ 2

Взято из этот маленький справочник GCC:

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

С красивой маленькой блок-схемой того, что GCC точно делает, в зависимости от расширений файла:

input extensions      runs     if   output  

GCC run flow