Утилита make как средство сборки сложных проектов

Наконец открыл для себя утилиту make. Собственно, про её применение для сборки программ я знал и раньше, но в голову не приходило попробовать применить на чём-то, отличном от программирования. Началось с того, что я написал для сборки сайта www.serann.ru набор шелловых скриптов, каждый из которых включал в начале дополнительный файл set_environment для установки переменных окружения. Система получилась громоздкой и неустойчивой в плане расширения и модификации -- слишком много отдельных скриптов с неясными зависимостями. Сегодня утром решил таки почитать info make и в итоге к вечеру почти все свои разношёрстные скрипты сборки свёл в один makefile. Весь процесс сборки разбит на легко обозримые куски, зависимости между ними прописаны там же в явной форме -- красота. И, главное, легко добавлять "особенные" сборки, к примеру, для быстрой пересборки-закачки сайта после добавления новости.

Наконец открыл для себя утилиту make. Собственно, про её применение для сборки программ я знал и раньше, но в голову не приходило попробовать применить на чём-то, отличном от программирования.

Началось с того, что я написал для сборки сайта www.serann.ru набор шелловых скриптов, каждый из которых включал в начале дополнительный файл set_environment для установки переменных окружения. Система получилась громоздкой и неустойчивой в плане расширения и модификации -- слишком много отдельных скриптов с неясными зависимостями.

Сегодня утром решил таки почитать info make и в итоге к вечеру почти все свои разношёрстные скрипты сборки свёл в один makefile. Весь процесс сборки разбит на легко обозримые куски, зависимости между ними прописаны там же в явной форме -- красота. И, главное, легко добавлять "особенные" сборки, к примеру, для быстрой пересборки-закачки сайта после добавления новости.
<!--break-->
Makefile для сборки сайта:

<pre>

<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_FLAG_DIR=/home/serann/flags<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_MAKESITE_SCRIPTS=/home/serann/scripts/makesite<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_BACKUP_DIR=/home/serann/backup<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_TEMP_DIR=/home/serann/temp<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_TEMPLATES_DIR=/home/serann/templates<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_IN_PROGRESS_TEXTS_DIR=/home/serann//texts/in_progress<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_PREPARED_TEXTS_DIR=/home/serann//texts/prepared<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_NEW_TEXTS_DIR=/home/serann//texts/new<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_COMMON_SITE_ROOT=/home/serann/www.serann.ru<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_HTML=html<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_CGIBIN=cgi-bin<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_UPDATES_DIR=/home/serann/update<br>
<font color="#af5f00"><b>export</b></font>&nbsp;CEPAHH_OK=1<br>
<br>
<font color="#af5f00"><b>export</b></font>&nbsp;PWD=/home/serann/scripts/makesite<br>
<br>
<font color="#008080">RM</font>=/bin/rm<br>
<font color="#008080">TOUCH</font>=/bin/touch<br>
<br>
<font color="#008080">VPATH</font>:=<font color="#008080">${CEPAHH_FLAG_DIR}</font><br>
<br>
<font color="#008080">help:</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Если вы запустили этот Makefile без параметров -- он вам, скорее всего, не нужен.&quot;</font><br>
<br>
<font color="#008080">clean_flags:</font><br>
<font color="#c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#008080">${RM}</font><font color="#c00000">&nbsp;-f </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/*</font><br>
<br>
<font color="#008080">backup:</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./backupDB.pl </font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Бэкап базы данных завершён&quot;</font><br>
<br>
<font color="#008080">add_from_prepared:</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">/auto-01-add_from_prepared.sh</font><br>
<br>
<br>
<font color="#008080">build_filesbbs: </font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Создание свежего файла files.bbs&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; </font><font color="#008080">${RM}</font><font color="#c00000">&nbsp;-f </font><font color="#008080">${CEPAHH_COMMON_SITE_ROOT}</font><font color="#c00000">/</font><font color="#008080">${CEPAHH_HTML}</font><font color="#c00000">/texts/files.bbs</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./make_current_files_bbs.pl </font><font color="#008080">${CEPAHH_COMMON_SITE_ROOT}</font><font color="#c00000">/</font><font color="#008080">${CEPAHH_HTML}</font><font color="#c00000">/texts/files.bbs</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/build_filesbbs</font><br>
<br>
<font color="#008080">build_commonsite:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка общей части сайта&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./makecommon.pl</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/build_commonsite</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка общей части сайта завершена&quot;</font><br>
<br>
<font color="#008080">build_links:&nbsp;&nbsp;&nbsp;&nbsp;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка каталога ссылок&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./makelinks.pl</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/build_links</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка каталога ссылок завершена&quot;</font><br>
<br>
<font color="#008080">build_jenres:&nbsp;&nbsp; </font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка дерева жанров&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./makejenres.pl</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/build_jenres</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка дерева жанров завершена&quot;</font><br>
<br>
<br>
<font color="#008080">makeupdate:&nbsp;&nbsp;&nbsp;&nbsp; </font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Очистка каталога обновления&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_UPDATES_DIR}</font><font color="#c00000">&nbsp;&amp;&amp; rm -rf *</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка обновления&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./diffsite.pl</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Упаковка обновления&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_UPDATES_DIR}</font><font color="#c00000">&nbsp;&amp;&amp; tar czf update.tgz `ls .` &amp;&amp; echo </font><font color="#c00000">&quot;Размер файла обновления:&quot;</font><font color="#c00000">&nbsp;`ls -lh update.tgz&nbsp;&nbsp;| cut -d </font><font color="#c00000">' '</font><font color="#c00000">&nbsp;-f 5`</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/makeupdate</font><br>
<br>
<font color="#008080">upload_update:&nbsp;&nbsp;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Загрузка апдейта на сайт&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; </font><font color="#c000c0">\</font><br>
<font color="#c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@perl -ne </font><font color="#c00000">&quot;s@CEPAHH_UPDATES_DIR@\</font><font color="#008080">$$</font><font color="#c00000">ENV{'CEPAHH_UPDATES_DIR'}@; print&quot;</font><font color="#c00000">&nbsp;upload_update.ftp &gt;.upload_update.ftp &amp;&amp; </font><font color="#c000c0">\</font><br>
<font color="#c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@touch </font><font color="#008080">${CEPAHH_UPDATES_DIR}</font><font color="#c00000">/need_update &amp;&amp; </font><font color="#c000c0">\</font><br>
<font color="#c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sftp -b .upload_update.ftp serann@serann.ru &amp;&amp; </font><font color="#c000c0">\</font><br>
<font color="#c00000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -f .upload_update.ftp</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/upload_update</font><br>
<br>
<font color="#008080">checksums:</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Подсчёт контрольной суммы локальной копии сайта&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">cd </font><font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font><font color="#c00000">&nbsp;&amp;&amp; ./ccs.pl</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Подсчёт контрольной суммы локальной копии сайта завершён&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">touch </font><font color="#008080">${CEPAHH_FLAG_DIR}</font><font color="#c00000">/checksums</font><br>
<br>
<br>
<br>
<font color="#008080">new_release:</font>&nbsp;add_from_prepared build_filesbbs build_commonsite build_links build_jenres makeupdate upload_update checksums backup clean_flags<br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка обновления (с текстами) завершена&quot;</font><br>
<br>
<font color="#008080">add_news_to_site:</font>&nbsp;build_commonsite makeupdate upload_update checksums backup clean_flags<br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font><font color="#c00000">echo </font><font color="#c00000">&quot;Сборка обновления (с новостями) завершена&quot;</font><br>
<br>
<font color="#008080">split_into_in_progress:</font><br>
<font color="#c000c0">ifeq</font>&nbsp;(<font color="#008080">$(all)</font>,)<br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font>echo <font color="#c00000">&quot;Для обработки этой цели необходимо указать файл, примерно так:&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font>echo <font color="#c00000">&quot;make split_into_in_progress all='полноеимяфайла'&quot;</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font>exit<br>
<font color="#c000c0">else</font><br>
<font color="#c000c0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</font>cd <font color="#008080">${CEPAHH_MAKESITE_SCRIPTS}</font>&nbsp;&amp;&amp; ./split_all_to_texts.pl <font color="#008080">$(all)</font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<font color="#c000c0">endif</font><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
</font>
</pre>

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.