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

В чем разница между make и gcc?

Последнее предложение в статье привлекло мое внимание

[F] или разработчики C/С++ и студенты, заинтересованные в программы на C/С++, а не пользователей Linux. Это связано с тем, что компиляция исходного кода делается простым в GNU/Linux с помощью "make" команда.

Я всегда использовал gcc для компиляции моих программ на C/С++, тогда как javac для компиляции моих программ Java. Я только использовал make для установки программ на свой компьютер с помощью configure/make/make install.

Кажется, что вы можете скомпилировать все ваши программы с помощью команды make.

В чем разница между make и gcc?

4b9b3361

Ответ 1

Ну... gcc - это компилятор, make - это инструмент, помогающий создавать программы. Разница огромная. Вы никогда не сможете создавать программу, используя только make; это не компилятор. Что делает, он вводит отдельный файл "правил", который описывает, как перейти от исходного кода к готовой программе. Затем он интерпретирует этот файл, вычисляет, что нужно компилировать, и вызывает gcc для вас. Это очень полезно для больших проектов с сотнями или тысячами файлов исходного кода и для отслеживания таких вещей, как параметры компилятора, включая пути и т.д.

Ответ 2

gcc компилирует и/или связывает один файл. Он поддерживает несколько языков, но не знает, как объединить несколько исходных файлов в нетривиальную запущенную программу - для создания даже самых простых программ вам обычно потребуется как минимум два вызова gcc (компиляция и ссылка).

Страница Википедии в GCC описывает ее как "систему компилятора":

Сборник компилятора GNU (обычно сокращенный до GCC) - это система компилятора, созданная проектом GNU, поддерживающая различные языки программирования.

make - это "инструмент сборки", который вызывает компилятор (который может быть gcc) в определенной последовательности для компиляции нескольких источников и связывания их вместе. Он также отслеживает зависимости между различными исходными файлами и объектными файлами, которые возникают в результате компиляции источников, и выполняет только операции над компонентами, которые изменились с момента последней сборки.

GNUmake - одна из популярных реализаций make. Описание из GNUmake выглядит следующим образом:

Make - это инструмент, который управляет генерацией исполняемых файлов и других неистовых файлов программы из исходных файлов программы.

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

Ответ 3

gcc - компилятор C: он берет исходный файл C и создает машинный код либо в виде несвязанных объектных файлов, либо как фактическую исполняемую программу, которая связана со всеми объектными модулями и библиотеками.

make полезен для управления процессом сборки проекта. Типичная программа C состоит из нескольких модулей (.c) и файлов заголовков (.h). Было бы трудоемким всегда компилировать все после того, как вы что-либо изменили, поэтому make предназначен только для компиляции деталей, которые необходимо скомпилировать после изменения.

Он делает это, следуя правилам, созданным программистом. Например:

foo.o: foo.c foo.h
    cc -c foo.c

Это правило говорит, что файл foo.o зависит от файлов foo.c и foo.h, и если любой из них изменяется, его можно построить, выполнив команду во второй строке. (Вышеупомянутый не является фактическим синтаксисом: make хочет команды с отступом от символов TAB, которые я не могу сделать в этом режиме редактирования. Представьте, что это там.)

make считывает свои правила из файла, который обычно называется Makefile. Поскольку эти файлы (традиционно) написаны от руки, у make есть много волшебства, позволяющих вам сократить правила. Например, он знает, что foo.o можно построить из foo.c, и он знает, что команда для этого. Таким образом, приведенное выше правило может быть сокращено до этого:

foo.o: foo.h

Небольшая программа, состоящая из трех модулей, может иметь Makefile следующим образом:

mycmd: main.o foo.o bar.o
    $(CC) $(LDFLAGS) -o mycmd main.o foo.o bar.o
foo.o: foo.h bar.h
bar.o: bar.h

make может делать больше, чем просто компилировать программы. Типичный Makefile будет иметь правило для очистки нежелательных файлов:

clean:
    rm -f *.o core myapp

Другое правило может запускать тесты:

check: myapp
    ./myapp < test.input > test.output
    diff -u test.correct test.output

Файл Makefile может создать сборку: запустите инструмент для конвертации документации с некоторого языка разметки в HTML и PDF, например.

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

И так далее. Поскольку make является универсальным и мощным, он обычно используется для автоматизации всего процесса от распаковки исходного tarball до того момента, когда программное обеспечение будет готово к использованию пользователем.

Существует много нового, чтобы узнать, как сделать, если вы хотите полностью изучить его. Версия GNU make имеет особенно хорошую документацию: http://www.gnu.org/software/make/manual/ имеет ее в различных формах.

Ответ 4

Make часто использует gcc для компиляции множества файлов C или С++.

Ответ 5

Make - это инструмент для построения любой сложной системы, где есть зависимость между различными компонентами системы, выполняя минимальный объем работы.

Если вы хотите узнать все, что может быть использовано для make, GNU make manual отлично.

Ответ 6

make использует Makefile в текущем каталоге, чтобы применить набор правил к своим входным аргументам. Вы также знаете некоторые правила по умолчанию, чтобы он выполнялся, даже если он не находит файл Makefile (или аналогичный) в текущем каталоге. Правило для выполнения для файлов cpp, таким образом, вызывает вызов gcc во многих системах.

Обратите внимание, что вы не вызываете make с именами входных файлов, а скорее с именами правил, которые отражают вывод. Поэтому вызов make xyz будет стремиться выполнить правило xyz, которое по умолчанию создает файл xyz (например, на основе файла исходного кода xyz.cpp.

Ответ 7

make - это, по сути, экспертная система для построения кода. Вы устанавливаете правила того, как все построено, и от чего они зависят. Затем Make может посмотреть временные метки всех ваших файлов и выяснить, что именно нужно перестраивать в любое время.

gcc - это сборник компиляторов gnu. Есть много языков, которые он поддерживает (C, С++, Ada и т.д., В зависимости от вашей установки), но все же это всего лишь один инструмент из многих, которые могут использовать для создания вашей системы.

Ответ 8

Вы можете использовать make для компиляции ваших программ на C и С++, вызвав gcc или g++ в свой make файл, чтобы выполнить все шаги компиляции и компоновки, позволяя вам выполнить все эти шаги с помощью одной простой команды. Это не замена компилятора.

Ответ 9

gcc - это компилятор вроде javac. Вы даете исходные файлы, это дает вам программу.

make - это инструмент построения. Он принимает файл, который описывает, как создавать файлы в вашем проекте на основе зависимостей между файлами, поэтому, когда вы меняете один исходный файл, вам не нужно перестраивать все (например, если вы использовали build script). make обычно использует gcc для фактической компиляции исходных файлов.

Ответ 10

'gcc' - это компилятор - программа, которая фактически превращает исходный код в исполняемый файл. Вы должны сказать, где исходный код, что выводить, и различные другие вещи, такие как библиотеки и параметры.

'make' больше похож на язык сценариев для компиляции программ. Это способ скрыть все детали компиляции вашего источника (все те аргументы, которые вы должны передать компилятору). Вы script все вышеперечисленные подробности один раз в Makefile, поэтому вам не нужно вводить его каждый раз для каждого файла. Он также сделает отличные вещи, такие как только перекомпилировать исходные файлы, которые были обновлены, и обрабатывать зависимости (если я перекомпилирую этот файл, мне нужно будет перекомпилировать THAT файл.)