Makefile Копирование только измененных целей - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть каталог, который содержит несколько различных сценариев (Bash, Perl и т. Д.) И файлы конфигурации. В этом каталоге еще больше каталогов, которые содержат еще больше скриптов и файлов конфигурации. Всего в разных каталогах и подкаталогах разбросано около 200 разных файлов.

Когда я выполняю 'make', мне нужно, чтобы все файлы, которые были изменены, были скопированы в другой каталог и сохранили свою структуру подкаталогов.

Что я хотел бы сделать, если любой из этих файлов изменится в этом каталоге, то я могу просто рекурсивно скопировать весь каталог в целевой каталог.

Однако я не уверен, является ли это лучшим или самым простым способом сделать это в GNU Make v3.81. Вот как выглядит мой Makefile:

PKG = my_prog_1.1

LOCAL_FILES = $(shell find my-local -type f)
TARGETS = $(patsubst my-local/%,$(PKG)/%,$(LOCAL_FILES))

.PHONY: rpm all

all: rpm

$(PKG):
        curl -f -O "URL_to_$(PKG).tar.gz"
        tar -xvf $(PKG).tar.gz
        rm -f $(PKG).tar.gz

$(TARGETS): $(LOCAL) | $(PKG)
        cd my-local && cp -R * ../$(PKG)

rpm: $(TARGETS)
        # commands to tar up $(PKG) and make an rpm

В конечном счете, я бы хотел, чтобы $ (PKG) не существовало, а затем мне нужно curl распаковать его. Затем, если какие-либо файлы изменились в my-local, только эти файлы должны быть скопированы в $ (PKG). Если в my-local файлы не были изменены, нет необходимости перестраивать цель rpm.

...