Pergunta

Eu estou tentando configurar um nmake makefile para exportar nossos arquivos maquete Balsamiq para PNG arquivos automaticamente, mas eu tenho medo que eu não posso fazer cara nem caudas de como fazer uma regra genérica para fazê-lo, sem listar explicitamente todos os arquivos que eu quero exportados.

Esta página detalha a sintaxe de linha de comando para exportar os arquivos, e desta página contém um exemplo que parece que contém uma regra genérica para obj arquivos para arquivos .exe.

O makefile Eu tentei até agora se parece com isso:

.bmml.png:
    "C:\Program Files\Balsamiq Mockups\Balsamiq Mockups.exe" export $< $@

Mas isso não funciona.

Se eu simplesmente executar nmake (com alguns arquivos PNG desatualizados), nmake apenas faz isso:

[C:\Temp] :nmake

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


[C:\Temp] :

Se eu pedi-lo a construir um arquivo específico, ele faz isso:

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

Qualquer nmake gurus lá fora, que pode me definir reta?

Um exemplo makefile que simplesmente faz .dat de arquivos .txt, copiando-os, para experimentar com, parece com isso:

.txt.dat:
    copy $< $@

isso não faz nada bem, tão claramente eu não estou entendendo como tais regras genéricas trabalho. Eu preciso especificar um objetivo acima que de alguma forma lista os arquivos que eu quero?


Editar : Em resposta à nova resposta:

Este makefile:

{}.txt{}.dat:
    copy $** $@

com esta imagem (test.dat)

1
2
3

e este comando:

NMAKE test.txt

Produz esta mensagem de erro:

[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.
Foi útil?

Solução

NMAKE regras padrão são muito parecidos com o GNU make regras sufixo old-school. No seu caso, você tinha quase certa para começar, mas que estava faltando a declaração .SUFFIXES. Por exemplo:

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

Eu acho que isso é apenas uma parte da sua solução, porém, porque você também mencionou querendo evitar explicitamente listando todos os arquivos a serem convertidos. Infelizmente, eu não sei de uma forma muito limpa para fazer isso em NMAKE, uma vez que só se expande wildcards em listas de dependência, eo que você realmente deseja em sua lista de dependência não é a lista de arquivos que já existem (o .bmml * arquivos), mas a lista de arquivos que serão criados a partir desses arquivos (os arquivos * .png). No entanto, eu acho que você pode conseguir seu objetivo com uma invocação NMAKE recursiva como esta:

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

Aqui, NMAKE irá expandir *.bmml na lista de pré-requisito para all na lista de arquivos .bmml no diretório, e então ele vai começar uma nova instância NMAKE, especificando os objetivos de construir como a lista de arquivos com todas as instâncias de .bmml substituído por .png. Então, juntando tudo:

.SUFFIXES: .bmml .png
all: *.bmml
    @echo Converting $(**) to .png...
    @$(MAKE) $(**:.bmml=.png)

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

Se eu criar arquivos Test1.bmml e Test2.bmml e depois executar este makefile, eu recebo o seguinte resultado:

Converting Test1.bmml Test2.bmml to .png...
Building Test1.png from Test1.bmml
Building Test2.png from Test2.bmml

É claro que, se você tem muito muitos desses arquivos .bmml, você pode entrar em conflito com limitações de comprimento de linha de comando, por isso esteja atento para isso. Nesse caso, eu recomendaria ou listando explicitamente os arquivos de origem, ou usando uma ferramenta mais capaz marca, como o GNU make (que está disponível para Windows em uma variedade de formas).

Outras dicas

Will este trabalho para você? Colocar isso em MAKEFILE:.

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

Em seguida, execute:

nmake /A

Eu não tenho Balsamiq então não posso testar isso, mas no meu caso, se eu tenho o seguinte MAKEFILE:.

export : *.txt
    copy $** $(**B).dat

e nmake /A prazo em uma pasta com meuArquivo.txt, ele irá criar myfile.dat.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top