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 norsync
ocp -u
si 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)