Стоит ли изучать GNU Make? - PullRequest
       15

Стоит ли изучать GNU Make?

18 голосов
/ 27 августа 2009

В последнее время я чувствую необходимость освоить инструмент для сборки. Я просматриваю рекомендации StackOverflow, а Gnu Make почти не упоминается. Вместо этого я вижу Ant, Maven, CMake, Scon и многих других. Однако, когда я смотрю на маленькие «мошеннические источники» (например, не в репо), которые мне иногда приходится компилировать, все они требуют шагов make && make install.

Разве обучение - это худшее вложение моего времени, чем изучение другого инструмента?

Если так, то почему Make все еще так популярен?

Ответы [ 8 ]

24 голосов
/ 27 августа 2009

Make - это стандартный инструмент сборки для всего C / C ++. Многие другие вышли на тарелку, но даже когда они были полезны и успешны, они так и не достигли повсеместного распространения.

Make установлен практически на каждой Unix-подобной машине. Независимо от того, работаете ли вы с AIX, Solaris, Irix, BSD или Linux, если установлен компилятор, есть также make.

Некоторые из «замен» (например, Automake, CMake) даже создают Make-файлы, которые в свою очередь выполняются make.

Я бы определенно рекомендовал бы ознакомиться с make. Если кто-то потратил время на то, чтобы узнать о make, он станет мощным инструментом, который можно использовать различными способами, даже не обязательно связанными с разработкой программного обеспечения.

Даже если в итоге вы в конечном итоге воспользуетесь другим инструментом сборки, вы сможете «переработать» уроки, извлеченные с помощью make, поскольку базовые концепции весьма схожи. А огромное количество готовых проектов означает, что у вас всегда будет шанс выяснить существующий Makefile.

Одна вещь, хотя. Получите это с самого начала.

8 голосов
/ 27 августа 2009

Я думаю, что причина, по которой вы не видите упоминания (GNU), заключается в том, что это часто значение по умолчанию; если у вас есть цепочка инструментов GNU, вы уже будете делать make. Таким образом, большинство людей, которые начинают говорить об инструментах сборки, говорят о чем-то другом.

По моему опыту, make - это хорошо, но может быть довольно сложно заставить его делать именно то, что вы хотите. Это может быть немного загадочно, но это доказано и работает.

3 голосов
/ 27 августа 2009

Make популярен, потому что он используется (главным образом) для исходных текстов C / C ++ в проектах Linux / * nix, и он намного старше, чем любой другой из упомянутых вами инструментов, поэтому он выдержал испытание временем и является зрелым , Вроде как смола.

Если честно с тобой, я знаю только марки. Эти другие инструменты, представленные выше, могут быть лучше, но так много проектов просто используют основной Makefile, так что вам лучше знать хотя бы немного о нем. Не только для ваших собственных проектов на работе, но и для большинства открытых проектов, которые вы найдете в сети.

2 голосов
/ 27 августа 2009

Это действительно зависит от того, сколько вы будете использовать.

Если вы много работаете с C / C ++ make-проектами, то да, я бы рекомендовал узнать об этом больше, поскольку большой make-файл имеет более крутой график обучения, чем другие упомянутые вами инструменты сборки.

Если вы не работаете с make или не работаете с другими языками, такими как C #, Java или PHP, вам лучше изучить инструменты сборки, относящиеся к этим языкам.

1 голос
/ 27 августа 2009

Make является стандартом де-факто, например, в системах Linux. Это очень сложный инструмент, а также очень мощный инструмент.

Хорошо подходит для изучения того, разрабатываете ли вы C или C ++, особенно если вы нацелены на Linux / * nix.

Одной из особенностей make является то, что вы можете установить зависимости для того, когда перестраивать файл. Например. каждый файл c или c ++ встроен в файл .obj, и, в конце концов, все файлы .obj связаны с исполняемым файлом. Но, возможно, исполняемый файл является статически связанной библиотекой, которая связана с другим исполняемым файлом с другими файлами .obj.

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

Если вы разрабатываете, например, на C #, вам не нужна такая проверка зависимостей, потому что все файлы .cs сразу скомпилированы в один исполняемый файл.

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

1 голос
/ 27 августа 2009

Как и все инструменты, если вы используете его вообще, вы должны потратить некоторое время чтобы стать достаточно искусным в этом. Кроме того, некоторые инструменты (например, CMake) генерируют make-файлы, и однажды вам может понадобиться возиться с этими сгенерированными файлами.

GNU make имеет превосходное руководство - его, безусловно, стоит потратить на час или два на его чтение.

0 голосов
/ 27 августа 2009

Я думаю, где ты работаешь, вероятно, отличается, но я знаю, что везде, где я работал, я был бы гораздо менее ценным сотрудником, если бы я хотя бы не научился читать Makefiles. Даже во всех средах Windows-VisualStudio это происходит время от времени.

Например, мы только что получили работу, которая предполагает перенос множества старых кодов CX / UX в Windows. Старый код был собран с make-файлами. Нет никакого способа понять их старую систему, не зная, как читать эти старые make-файлы.

0 голосов
/ 27 августа 2009

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

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

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