2017-06-07 1 views
0

J'ai plusieurs répertoires qui peuvent avoir des sous-répertoires, et je vais compresser chacun d'eux dans un fichier si n'importe quel fichier dans ce répertoire est changé. Par exemple, j'ai 2 répertoires dir1 dir2, et je veux les compresser à comp_dir1.tar.gz et comp_dir2.tar.gz.GNU Makefile générique pour le répertoire

j'ai écrit le code suivant:

comp_%.tar.gz : %/$(shell find % -name "*") 
    tar -czvf [email protected] $< 

Mais j'ai l'erreur:

find: ‘%’: No such file or directory 

Il est évident que dans la commande shell, je ne peux pas utiliser "%".

Y at-il un moyen de résoudre ce problème?

+0

Voulez-vous dire que vous voulez faire tarballs de l'un de ces plusieurs répertoires dans lesquels un fichier à toute profondeur a changé, ou si vous souhaitez faire un tarball d'un répertoire à toute profondeur dans lequel un fichier a changé? – Beta

+0

L'ancien. –

Répondre

0

De toute façon, vous avez besoin d'une liste des répertoires que vous voulez compresser. En utilisant cela, vous pouvez utiliser une fonction GNU Make Remaking Makefiles pour générer des "fichiers de dépendance" qui incluent tous les fichiers trouvés dans ces répertoires. Voici un exemple de travail:

DIRECTORIES:=dir1 dir2 
ARCHIVES:=$(addsuffix .tar.gz,$(addprefix comp_,$(DIRECTORIES))) 

all: $(ARCHIVES) 

comp_%.tar.gz.d: % 
    echo $(@:.d=) $(@): $(shell find $< -name "*") > $(@) 

# include the dependency files, this will cause GNU make to attempt creating 
# them using the above pattern rule. 
-include $(addsuffix .d,$(ARCHIVES)) 

comp_%.tar.gz: % 
    tar czvf [email protected] $< 

.PHONY: all 
+0

Merci. C'est une bonne idée de générer les fichiers de dépendance en premier. –