png - Usar nmake con comodines en el archivo MAKE
export balsamiq (2)
Estoy intentando configurar un makefile nmake para exportar nuestros archivos balsamiq mack a archivos png de forma automática, pero me temo que no puedo encontrar pistas sobre cómo hacer una regla genérica para hacerlo, sin enumerar explícitamente todos los archivos Quiero exportar
Esta página detalla la sintaxis de la línea de comando para exportar los archivos, y esta página contiene un ejemplo que parece que contiene una regla genérica para archivos .obj a archivos .exe.
El archivo MAKE que he probado hasta ahora se parece a esto:
.bmml.png:
"C:/Program Files/Balsamiq Mockups/Balsamiq Mockups.exe" export $< $@
Pero esto no funciona.
Si simplemente ejecuto nmake (con algunos archivos png obsoletos), nmake solo hace esto:
[C:/Temp] :nmake
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
[C:/Temp] :
Si le pido que cree un archivo específico, hace esto:
[C:/Temp] :nmake "TestFile.png"
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: don''t know how to make ''"TestFile.png"''
Stop.
[C:/Temp] :
¿Alguna gurú nmake que me pueda aclarar?
Un ejemplo de archivo MAKE que simplemente hace archivos .dat de archivos .txt copiándolos, para experimentar, se ve así:
.txt.dat:
copy $< $@
esto no hace nada, así que claramente no entiendo cómo funcionan esas reglas genéricas. ¿Debo especificar un objetivo anterior que de alguna manera enumere los archivos que quiero?
Editar : en respuesta a una nueva respuesta:
Este archivo MAKE
{}.txt{}.dat:
copy $** $@
con este archivo (test.dat)
1
2
3
y este comando:
NMAKE test.txt
Produce este mensaje de error:
[C:/] :nmake test.txt
Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
NMAKE : fatal error U1073: don''t know how to make ''test.txt''
Stop.
Funcionara para ti? Pon esto en MAKEFILE .:
export : *.bmml
"C:/Program Files/Balsamiq Mockups/Balsamiq Mockups.exe" export $** $(**B).png
Entonces corre:
nmake /A
No tengo Balsamiq así que no puedo probar esto pero en mi caso si tengo el siguiente MAKEFILE .:
export : *.txt
copy $** $(**B).dat
y ejecute nmake /A
en una carpeta con myFile.txt, creará myFile.dat.
Las reglas de patrones NMAKE son muy parecidas a las reglas de GNU sobre sufijos de la vieja escuela. En su caso, tenía casi derecho para empezar, pero le faltaba la declaración .SUFFIXES. Por ejemplo:
.SUFFIXES: .bmml .png
.bmml.png:
@echo Building $@ from $<
Sin embargo, creo que esto es solo parte de su solución, porque también mencionó que desea evitar incluir explícitamente todos los archivos que se convertirán. Desafortunadamente, no conozco una manera muy clara de hacerlo en NMAKE, ya que solo expande comodines en las listas de dependencias, y lo que realmente desea en su lista de dependencias no es la lista de archivos que ya existen (el * .bmml archivos), pero la lista de archivos que se crearán a partir de esos archivos (los archivos * .png). Sin embargo, creo que puede lograr su objetivo con una invocación NMAKE recursiva como esta:
all: *.bmml
$(MAKE) $(**:.bmml=.png)
Aquí, NMAKE expandirá *.bmml
en la lista anterior para all
en la lista de archivos .bmml en el directorio, y luego comenzará una nueva instancia NMAKE, especificando los objetivos para compilar como esa lista de archivos con todas las instancias de .bmml
reemplazado por .png
. Entonces, poniéndolo todo junto:
.SUFFIXES: .bmml .png
all: *.bmml
@echo Converting $(**) to .png...
@$(MAKE) $(**:.bmml=.png)
.bmml.png:
@echo Building $@ from $<
Si creo los archivos Test1.bmml y Test2.bmml y luego ejecuto este makefile, obtengo el siguiente resultado:
Converting Test1.bmml Test2.bmml to .png...
Building Test1.png from Test1.bmml
Building Test2.png from Test2.bmml
Por supuesto, si tiene muchos de estos archivos .bmml, puede encontrarse con limitaciones de longitud de la línea de comandos, así que tenga cuidado con eso. En ese caso, recomiendo que se enumeren explícitamente los archivos de origen o que se use una herramienta de creación más capaz, como GNU make (que está disponible para Windows en una variedad de formas).