directory - primer - makefile wikipedia
¿Cómo copiar un directorio en un makefile? (1)
Tengo un directorio de images/ que quiero copiar para build/images/ desde un Makefile. El directorio puede contener múltiples niveles de subdirectorios. ¿Cuál sería la forma más elegante de hacerlo? Quiero:
- evitar una copia completa del directorio en cada ejecución de ejecución (es decir, no
cp -r) - consistencia garantizada (es decir, si un archivo cambió en
images/debería actualizarse automáticamente enbuild/images/) - evite especificar una regla para cada imagen y cada subdirectorio en el Makefile
- resuelva el problema dentro de
make, por lo que norsyncocp -usi es posible
Estoy usando GNU make, así que se permiten cosas específicas de GNU.
Bueno, solo usaría rsync . Cualquier script de creación que cree con estas restricciones simplemente replicará su funcionalidad, y probablemente será más lento y puede contener errores. Una regla de ejemplo podría verse:
build/images:
rsync -rupE images build/
.PHONY: build/images
(.FONIA para activar la regla cada vez).
Tal vez los enlaces simbólicos o enlaces duros se pueden utilizar en su lugar?
build/images:
ln -s ../images build/images
Si realmente quieres evitar rsync y enlaces, esta pieza los reimplementa de alguna manera (no probado, necesita find , mkdir y cp simple):
image_files:=$(shell find images -type f)
build/images/%: images/%
mkdir -p $(@D)
cp $< $@
build: $(patsubst %,build/%,image_files)