es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El archivo Makefile parece tomar ambos ingeres en lugar de uno a la vez.

Tengo dos archivos 1.gv y 2.gv que son archivos de Graphviz.

Escribí este Makefile basado en lo que pude entender:

DOT=dot
FORMAT=svg
SRC=$(wildcard *.gv)
OUT=$(subst .gv,.$(FORMAT),$(SRC))

all: $(OUT)

$(OUT): $(SRC)
    $(DOT) -T$(FORMAT) $^ -o $@

.PHONY: clean
clean:
    rm -f $(OUT)

La limpieza parece funcionar, el único problema parece ser que se ejecuta así:

dot -Tsvg 1.gv 2.gv -o 1.svg
dot -Tsvg 1.gv 2.gv -o 2.svg

en lugar de:

dot -Tsvg 1.gv -o 1.svg
dot -Tsvg 2.gv -o 2.svg
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de que el archivo Makefile ejecute dot tanto en los archivos 1.gv como en 2.gv al mismo tiempo, necesitamos modificar el objetivo $(OUT) para que utilice $< en lugar de $^. Esto garantizará que dot se ejecute por separado para cada archivo fuente y que los archivos de salida tengan el nombre correcto. Aquí está el archivo Makefile actualizado:

    DOT=dot
    FORMAT=svg
    SRC=$(wildcard *.gv)
    OUT=$(subst .gv,.$(FORMAT),$(SRC))
    
    all: $(OUT)
    
    %.svg: %.gv
        $(DOT) -T$(FORMAT) $< -o $@
    
    .PHONY: clean
    clean:
        rm -f $(OUT)
    

    Con este Makefile actualizado, al ejecutar make, se generarán correctamente los archivos 1.svg y 2.svg a partir de 1.gv y 2.gv, respectivamente. Al ejecutar make clean, se eliminarán todos los archivos SVG generados.

Comments are closed.