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

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

Является ли обучение менее затратным вложением моего времени, чем изучение другого инструмента?

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


person Michael Ekoka    schedule 27.08.2009    source источник


Ответы (8)


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

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

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

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

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

Хотя одно. Сделайте это с самого начала.

person DevSolar    schedule 27.08.2009
comment
stackoverflow.com/ questions / 559216 / - тоже хорошая ссылка, даже если она появляется на упомянутой вами странице Google. - person Ehtesh Choudhury; 13.03.2013
comment
Несколько лет спустя я очень полюбил CMake и создал готовый к использованию пакет для запуска проекта C ++ с CMake. Но я все же отвечаю утвердительно на вопрос: стоит ли изучать GNU Make? Это определенно так. Это не значит, что этому не стоит учиться, например. CMake тоже. - person DevSolar; 04.03.2014

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

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

person unwind    schedule 27.08.2009

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

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

person J. Polfer    schedule 27.08.2009
comment
Это базовый, самодостаточный (вам не нужны python, jre, php # .net с ruby ​​bindings, корпоративная версия, независимо от того, что запускать), более или менее независимый от языка. - person Michael Krelin - hacker; 27.08.2009

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

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

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

person Nosrama    schedule 27.08.2009

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

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

person Community    schedule 27.08.2009

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

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

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

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

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

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

person Pete    schedule 27.08.2009

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

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

person Rushyo    schedule 27.08.2009

Думаю, где вы работаете, вероятно, отличается, но я знаю, что везде, где бы я ни работал, я был бы гораздо менее ценным сотрудником, если бы я хотя бы не научился читать файлы Makefile. Даже во всех средах Windows-VisualStudio он время от времени возникает.

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

person T.E.D.    schedule 27.08.2009