utilizar primer makeopts instalar fichero existe directorio create configurar compilar como archivos directory makefile gnu-make

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 en build/images/ )
  • evite especificar una regla para cada imagen y cada subdirectorio en el Makefile
  • resuelva el problema dentro de make , por lo que no rsync o cp -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)