Pregunta

Estoy tratando de configurar un archivo make nmake para exportar nuestros archivos de maqueta balsamiq a archivos png automáticamente, pero me temo que no puedo hacer cara ni cruz de cómo hacer una regla genérica para hacerlo, sin mencionar explícitamente todos los archivos que quiero exportar.

Esta página detalla la sintaxis de la línea de comandos 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 makefile que he probado hasta ahora se ve así:

.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, lo hace:

[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] :

¿Hay algún gurú de nmake que pueda aclararme?

Un ejemplo de archivo MAKE que simplemente crea archivos .dat a partir de archivos .txt copiándolos, para experimentar, se ve así:

.txt.dat:
    copy $< $@

esto tampoco 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.
¿Fue útil?

Solución

Las reglas de patrón NMAKE son muy parecidas a las reglas de sufijo de la vieja escuela GNU. En su caso, tenía casi la razón para comenzar, pero le faltaba la declaración .SUFFIXES. Por ejemplo:

.SUFFIXES: .bmml .png
.bmml.png:
    @echo Building $@ from $<

Creo que esto es solo una parte de su solución, porque también mencionó querer evitar enumerar explícitamente todos los archivos que se convertirán. Desafortunadamente, no conozco una forma muy limpia de hacerlo en NMAKE, ya que solo expande comodines en las listas de dependencias, y lo que realmente quiere 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 recursiva de NMAKE como esta:

all: *.bmml
    $(MAKE) $(**:.bmml=.png)

Aquí, NMAKE expandirá *.bmml en la lista de requisitos previos para all en la lista de archivos .bmml en el directorio, y luego comenzará una nueva instancia de NMAKE, especificando los objetivos para construir como esa lista de archivos con todas las instancias de .bmml reemplazadas 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 archivos Test1.bmml y Test2.bmml y luego ejecuto este archivo MAKE, 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 estar en conflicto con las limitaciones de longitud de la línea de comandos, así que tenga cuidado con eso. En ese caso, recomiendo enumerar explícitamente los archivos de origen o usar una herramienta de creación más capaz, como GNU make (que está disponible para Windows en una variedad de formas).

Otros consejos

¿Funcionará esto para usted? Pon esto en MAKEFILE .:

export : *.bmml
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $** $(**B).png

Luego ejecuta:

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top