Я работаю на с ++ в основном как хобби (я все еще учусь в школе, и поэтому у меня нет настоящей работы). Среды разработки генерируют make-файл для меня, и поэтому мне интересно, стоит ли учиться создавать их самостоятельно. Под «стоящим изучением» я имею в виду, должен ли я отбросить все и научиться писать их, прежде чем продолжать изучать c ++? Будет ли их изучение действительно необходимым? Если да, я должен узнать о них (общий синтаксис и понимание того, как они работают и т. Д.) Или действительно научиться их писать?
12
Ответы:
Да, определенно стоит понять, как работают Makefiles. Возможно, это не относится к вам сейчас (потому что вы используете IDE, которая их генерирует), но есть вероятность, что знания будут полезны в будущем.
Честно говоря, это странное понятие "стоит учиться" ...
Но нет, я не думаю, что тебе нужно это делать.
Мы не можем предсказать, действительно ли вам понадобятся эти знания в будущем. Это зависит от того, продолжаете ли вы программирование на C ++ и в каком контексте вы это делаете.
Я бы порекомендовал оба. Если вы не можете написать Makefile, это спорно, что вы знаете, что происходит.
Есть другая точка зрения, которая говорит, что слишком много знаний не полезно.
Если вы углубитесь в это, вы узнаете, что существует множество разных версий Make, и что написание сложного Makefile, который работает с несколькими версиями Make на разных платформах ... сложно. Тем не менее, в мире открытого исходного кода, «наилучшей практикой» является использование таких инструментов, как
automake
,autoconf
и так далее, для генерации make-файлов и т. Д. Если вы это сделаете, большая часть сложности, связанной с версией / платформой, решается за кулисами. ,Наконец, вы пометили вопрос "Java". Я считаю, что вы не должны использовать
make
для создания приложений Java (если вы также не создаете библиотеки нативного кода). Существуют специфичные для Java инструменты сборки, которые намного проще в использовании ... и работают лучше, чемmake
.источник
Если вы работаете с открытыми или Unix-подобными операционными системами, да. Примите мужество, хотя, они не так сложны. Обучение
make
сэкономит вам много времени в долгосрочной перспективе.источник
Makefile важны в системах UNIX (например, AIX, Linux, OS X). Тем не менее, я думаю, что их абсолютная важность «ты должен знать это» в последние годы уменьшилась. Например, вы действительно не можете найти их в разработке Windows (Visual Studio и т. Д.), А XCode (в OS X) вообще использует другую систему. Я не сильно разбираюсь в Java, но там я думаю, что они используют муравьиные файлы и еще много чего.
Существует очень крутая система, называемая CMake, которая генерирует собственные файлы сборки для операционной системы, на которой вы работаете. Например, если вы пишете спецификацию своего проекта в CMake, то вы можете создать проект сборки Visual Studio в Windows, проект XCode в Mac и Makefile в Linux. В некотором смысле, CMake заменяет autoconf и automake.
Я обычно создаю файлы CMake для своих «больших проектов», но я знаю Make на тот случай, если я хочу написать быстрый Makefile «просто сделай это». Это хорошо для вашей культурной грамотности, потому что существуют тонны и тонны программных библиотек, которые используют Makefiles, и вам неизбежно придется редактировать определенные компиляторы и места расположения библиотек. Но вы обнаружите, что большие проекты (такие как KDE) переходят на CMake и тому подобное, поскольку у Make есть некоторые ограничения, которые поднимают их уродливую голову, когда проекты становятся сложными.
источник
Я предвзят, так как считаю, что make-файлы - ужасная система. Вы должны изучить общий синтаксис, чтобы вы могли модифицировать существующий make-файл. Но я не думаю, что изучение всего этого или создание с нуля полезно.
источник
Как и во многих аспектах вывода IDE, типичный автоматически сгенерированный make-файл часто неэффективно структурирован.
При соответствующем уровне понимания часто можно значительно улучшить производительность (более быстрые сборки и т. Д.). Однако, если вы действительно не знаете, что происходит, вы, скорее всего, будете FUBAR, когда возитесь с автоматически сгенерированным файлом.
Я настоятельно рекомендую понять, что происходит ... если вы впоследствии решите начать редактирование существующего или создание собственного, это отдельная проблема.
источник
Возможность успешного использования
make
или чего-то подобного позволяет установить флажок «понимает, как моделировать зависимости между частями программы, состоящей из более чем одного модуля».источник
Научиться писать Makefiles - хорошая идея по ряду причин.
источник
Вы всегда должны пытаться понять систему сборки, которую вы используете.
Это не обязательно означает, что вы должны иметь возможность создавать все файлы сборки вручную. Важной частью является понимание того, что система сборки делает для вашего проекта, и общая возможность компилировать небольшие проекты вручную (как в «наборе команд на терминале»).
Я просто склонен думать, что создание (простых) Make-файлов - самый простой шаг, чтобы понять, что происходит, но у вас могут быть другие способы понять, как создавать вещи.
Почему / когда изучать Makefiles
Если вы продолжаете программировать только для Windows и не ожидаете, что кто-то другой скомпилирует ваш код, смело компилируйте код так, как вам нравится.
Если вы хотите запрограммировать независимость от компилятора (например, «пусть другие решают, какой компилятор или IDE они хотят использовать»), вам следует изучить другую систему сборки, а не просто позволить вашей IDE «справиться с этим».
Если вы хотите программировать для разных платформ, вам, безусловно, нужно использовать широко распространенную систему сборки.
Это по-прежнему не означает, что вы должны знать, как автоматически сгенерированные Make-файлы работают в деталях. Вам просто нужно знать, как работают входные файлы для системы сборки. У них просто бывает похожий синтаксис.
Мне лично очень нравятся Makefiles, и я использую их для многих вещей. Не только компиляция кода. Я создаю Makefile для каждого большего PDF-файла, который я создаю (с LaTeX), и для каждого проекта, в котором мне нужно автоматизировать пару задач (сборка, упаковка, выгрузка, обновление зависимостей из исходных репозиториев, резервное копирование вручную / извлечение)
Тем не менее, я много работаю на терминале и работаю с Linux. Я не использую то, что вы бы назвали IDE, кроме vim (мощный текстовый редактор) и консольных инструментов. Это может сильно отличаться для вас.
Если вы когда-либо жаловались на необходимость запуска различных повторяющихся команд просто для «обновления» / package / upload / .. «проекта», то изучение написания Makefiles может оказаться для вас полезным.
Если у вас есть и вы используете инструменты / GUI / IDE для всего, то вы можете ничего не получить от этих знаний.
источник