Я видел, что make
это полезно для больших проектов, особенно с запутанными зависимостями, описанными в Makefile
, а также помогает с рабочим процессом. Я не слышал никаких преимуществ для использования make
для небольших проектов. Есть ли такие?
scripting
compiling
make
development
Гудвин Лу
источник
источник
make
чтобы узнать ответ. сделайте приличный шаблон Makefile и просто отредактируйте переменную его исходных файлов. нет необходимости вводить весь этот джаз.make
намного быстрее команды для ввода, чем большинство других, даже если вы не создаете умный Makefile дляОтветы:
В отличие от чего?
Предположим, у вас есть программа, которую вы разделили на два файла, которые вы назвали образно
file1.c
иfile2.c
. Вы можете скомпилировать программу, запустивНо для этого нужно каждый раз перекомпилировать оба файла, даже если изменился только один. Вы можете разложить шаги компиляции на
и затем, когда вы редактируете один из файлов, перекомпилируйте только этот файл (и выполните этап связывания, независимо от того, что вы изменили). Но что, если вы редактируете один файл, а затем другой, и вы забываете, что вы редактировали оба файла и случайно перекомпилировали только один?
Кроме того, даже для всего двух файлов у вас есть команды примерно на 60 символов. Это быстро становится утомительным, чтобы напечатать. Хорошо, конечно, вы можете поместить их в скрипт, но потом вы снова будете перекомпилировать. Или вы можете написать действительно причудливый, сложный скрипт, который проверяет, какие файлы были изменены, и выполняет только необходимые компиляции. Вы видите, куда я иду с этим?
источник
gcc -O3 -march=native -fwhole-program *.c
это в основном хорошо для цикла редактирования / компиляции / профиля. Но вы все еще хотите Makefile для использования другими людьми. Возможность использовать-fwhole-program
- интересное преимущество компиляции всего вместе, но-flto
обычно дает вам почти такие же оптимизации.Многие другие люди разбираются в деталях более сложных make-файлов и многих сложностях, которые с ними связаны. Я обычно использую make-файлы по совершенно другой причине:
Я не хочу ничего вспоминать.
Даже если ваш проект действительно скучный и простой, и вы не используете make-файлы «правильно»:
Мне не нужно думать об этом или относиться к этому иначе, чем к более сложному проекту:
Или, если я указал флаги (например
-O2
), мне не нужно помнить, что они были.Кроме того, если вы начинаете с простого make-файла, и вам нужно объединить / реорганизовать вещи позже, вам не нужно помнить, чтобы создавать каждый проект по-разному.
источник
Даже с небольшим проектом может быть полезно держать логику зависимостей под контролем и строить автоматически. Я также использовал его для запуска установок и деинсталляций, так что это был главный переключатель, сбрасывающий стадию.
источник
Если вы связываете свое приложение из 2 источников (
.c
файлов), вам не нужно перекомпилировать каждый файл, а только измененный, если вы используете make.Также я приведу пример из мира BSD. Они имеют каркас системных файлов Makefile. Они предоставляют вам пути к системным каталогам и имеют цели для установки программного обеспечения и страниц справочника.
Например, вы только что написали
beer.c
приложение и мануал для него назвалиbeer.6
. Вы создаетеMakefile
:..и позвони
make install
. Он автоматически компилирует и устанавливает ваше приложение,/usr/bin
компилирует и устанавливает вашу справочную страницу в место, где егоman
можно найти. Вы только что установили свое приложение одной простой командой!Очень удобно и абсолютно прозрачно для всех, кто знаком с BSD. Гораздо лучше, чем ручной сценарий.
источник
Пример
Makefile
для моего очень маленького проекта:getPixelColor
Он делает именно то, что говорит его имя, принимая два необязательных аргумента, координаты.
Мне особенно нравится, как все становится зависимым.
Как видите, он может делать все, что вам нужно, не вводя ничего лишнего:
Применение
Вы можете запустить его следующими способами:
Очистить старый бинарный файл:
Скомпилируйте новый бинарный файл:
Запустите исполняемый файл двумя способами:
координаты по умолчанию [0,0]
любые заданные координаты
Makefiles могут быть чрезвычайно полезны время от времени. Чем больше проект, тем больше выгода. Но даже при этом мой самый маленький C ++ проект, как вы можете видеть на примерах, избавляет вас от головной боли.
источник
make
довольно надежно доступен. Если вы распространяете свой проект с помощьюmakefile
, пользователи получат простую справку о том, как выполнять задачи так же, как вы. Этоmakefile
может быть больше, чем просто компиляция.Возьмите проект, который не требует компиляции, например. Я вспоминаю, как работал над проектом Python, в котором была команда make для очистки всех
.pyc
файлов, команда make для запуска тестов, команда для загрузки копии статических данных с сервера разработки и т. Д.источник