Domanda

Sto tentando di impostare un makefile di nmake per esportare automaticamente i nostri file mockup di balsamiq in file png, ma temo di non riuscire a capire come creare una regola generica per farlo, senza elencare esplicitamente tutti i file che voglio esportare.

Questa pagina descrive in dettaglio la sintassi della riga di comando per l'esportazione dei file e questa pagina contiene un esempio che sembra contenere una regola generica per i file .obj file .exe.

Il makefile che ho provato finora assomiglia a questo:

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

Ma questo non funziona.

Se eseguo semplicemente nmake (con alcuni file png obsoleti), nmake fa solo questo:

[C:\Temp] :nmake

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


[C:\Temp] :

Se gli chiedo di creare un file specifico, lo fa:

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

Qualche guru di nmake là fuori che può farmi capire?

Un esempio di makefile che crea semplicemente file .dat da file .txt copiandoli, per sperimentare, è simile al seguente:

.txt.dat:
    copy $< $@

anche questo non fa nulla, quindi chiaramente non capisco come funzionano tali regole generiche. Devo specificare un obiettivo sopra che in qualche modo elenchi i file che voglio?


Modifica : in risposta a una nuova risposta:

Questo makefile:

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

con questo file (test.dat)

1
2
3

e questo comando:

NMAKE test.txt

Produce questo messaggio di errore:

[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.
È stato utile?

Soluzione

Le regole del modello NMAKE sono molto simili a GNU che creano regole per i suffissi della vecchia scuola. Nel tuo caso, avevi quasi ragione per cominciare, ma mancava la dichiarazione .SUFFIXES. Ad esempio:

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

Penso che questa sia solo una parte della tua soluzione, perché hai anche detto di voler evitare di elencare esplicitamente tutti i file da convertire. Sfortunatamente, non conosco un modo molto pulito per farlo in NMAKE, poiché espande solo i caratteri jolly negli elenchi delle dipendenze e ciò che si desidera veramente nell'elenco delle dipendenze non è l'elenco dei file già esistenti (il * .bmml file), ma l'elenco dei file che verranno creati da tali file (i file * .png). Tuttavia, penso che tu possa raggiungere il tuo obiettivo con una invocazione NMAKE ricorsiva come questa:

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

Qui NMAKE espanderà *.bmml nell'elenco dei prereq per all nell'elenco dei file .bmml nella directory, quindi avvierà una nuova istanza NMAKE, specificando gli obiettivi da costruire come tale elenco di file con tutte le istanze di .bmml sostituite da .png. Quindi, mettendo tutto insieme:

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

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

Se creo i file Test1.bmml e Test2.bmml e quindi eseguo questo makefile, ottengo il seguente output:

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

Ovviamente, se hai molti di questi file .bmml, puoi scontrarti con le limitazioni della lunghezza della riga di comando, quindi fai attenzione. In tal caso, raccomando di elencare esplicitamente i file di origine o di utilizzare uno strumento di creazione più capace, come GNU make (che è disponibile per Windows in una varietà di forme).

Altri suggerimenti

Funzionerà per te? Metti questo in MAKEFILE .:

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

Quindi esegui:

nmake /A

Non ho Balsamiq quindi non posso provarlo ma nel mio caso se ho il seguente MAKEFILE .:

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

ed esegui nmake /A in una cartella con myFile.txt, creerà myFile.dat.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top