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

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

export CEPAHH_FLAG_DIR=/home/serann/flags
export CEPAHH_MAKESITE_SCRIPTS=/home/serann/scripts/makesite
export CEPAHH_BACKUP_DIR=/home/serann/backup
export CEPAHH_TEMP_DIR=/home/serann/temp
export CEPAHH_TEMPLATES_DIR=/home/serann/templates
export CEPAHH_IN_PROGRESS_TEXTS_DIR=/home/serann//texts/in_progress
export CEPAHH_PREPARED_TEXTS_DIR=/home/serann//texts/prepared
export CEPAHH_NEW_TEXTS_DIR=/home/serann//texts/new
export CEPAHH_COMMON_SITE_ROOT=/home/serann/www.serann.ru
export CEPAHH_HTML=html
export CEPAHH_CGIBIN=cgi-bin
export CEPAHH_UPDATES_DIR=/home/serann/update
export CEPAHH_OK=1

export PWD=/home/serann/scripts/makesite

RM=/bin/rm
TOUCH=/bin/touch

VPATH:=${CEPAHH_FLAG_DIR}

help:
        @echo "Если вы запустили этот Makefile без параметров -- он вам, скорее всего, не нужен."

clean_flags:
        ${RM} -f ${CEPAHH_FLAG_DIR}/*

backup:
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./backupDB.pl
        @echo "Бэкап базы данных завершён"

add_from_prepared:
        @${CEPAHH_MAKESITE_SCRIPTS}/auto-01-add_from_prepared.sh


build_filesbbs:
        @echo "Создание свежего файла files.bbs"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ${RM} -f ${CEPAHH_COMMON_SITE_ROOT}/${CEPAHH_HTML}/texts/files.bbs
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./make_current_files_bbs.pl ${CEPAHH_COMMON_SITE_ROOT}/${CEPAHH_HTML}/texts/files.bbs
        @touch ${CEPAHH_FLAG_DIR}/build_filesbbs

build_commonsite:      
        @echo "Сборка общей части сайта"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./makecommon.pl
        @touch ${CEPAHH_FLAG_DIR}/build_commonsite
        @echo "Сборка общей части сайта завершена"

build_links:    
        @echo "Сборка каталога ссылок"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./makelinks.pl
        @touch ${CEPAHH_FLAG_DIR}/build_links
        @echo "Сборка каталога ссылок завершена"

build_jenres:  
        @echo "Сборка дерева жанров"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./makejenres.pl
        @touch ${CEPAHH_FLAG_DIR}/build_jenres
        @echo "Сборка дерева жанров завершена"


makeupdate:    
        @echo "Очистка каталога обновления"
        @cd ${CEPAHH_UPDATES_DIR} && rm -rf *
        @echo "Сборка обновления"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./diffsite.pl
        @echo "Упаковка обновления"
        @cd ${CEPAHH_UPDATES_DIR} && tar czf update.tgz `ls .` && echo "Размер файла обновления:" `ls -lh update.tgz  | cut -d ' ' -f 5`
        @touch ${CEPAHH_FLAG_DIR}/makeupdate

upload_update:  
        @echo "Загрузка апдейта на сайт"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && \
        @perl -ne "s@CEPAHH_UPDATES_DIR@\$$ENV{'CEPAHH_UPDATES_DIR'}@; print" upload_update.ftp >.upload_update.ftp && \
        @touch ${CEPAHH_UPDATES_DIR}/need_update && \
        sftp -b .upload_update.ftp serann@serann.ru && \
        rm -f .upload_update.ftp
        @touch ${CEPAHH_FLAG_DIR}/upload_update

checksums:
        @echo "Подсчёт контрольной суммы локальной копии сайта"
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./ccs.pl
        @echo "Подсчёт контрольной суммы локальной копии сайта завершён"
        @touch ${CEPAHH_FLAG_DIR}/checksums



new_release: add_from_prepared build_filesbbs build_commonsite build_links build_jenres makeupdate upload_update checksums backup clean_flags
        @echo "Сборка обновления (с текстами) завершена"

add_news_to_site: build_commonsite makeupdate upload_update checksums backup clean_flags
        @echo "Сборка обновления (с новостями) завершена"

split_into_in_progress:
ifeq ($(all),)
        @echo "Для обработки этой цели необходимо указать файл, примерно так:"
        @echo "make split_into_in_progress all='полноеимяфайла'"
        @exit
else
        @cd ${CEPAHH_MAKESITE_SCRIPTS} && ./split_all_to_texts.pl $(all)
        
endif