Question

J'essaie de configurer un fichier make de nmake pour exporter automatiquement nos fichiers de maquette de balsamiq en fichiers png, mais je crains de ne pouvoir comprendre comment créer une règle générique sans le lister explicitement. tous les fichiers que je veux exporter.

Cette page détaille la syntaxe de la ligne de commande permettant d'exporter les fichiers. cette page contient un exemple qui ressemble à une règle générique pour les fichiers .obj aux fichiers .exe.

Le fichier Make que j'ai essayé jusqu'ici ressemble à ceci:

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

Mais cela ne fonctionne pas.

Si je lance simplement nmake (avec des fichiers png obsolètes), nmake fait juste ceci:

[C:\Temp] :nmake

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


[C:\Temp] :

Si je lui demande de créer un fichier spécifique, il procède comme suit:

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

Y a-t-il des gourous de nmake qui peuvent me remettre en ordre?

Un exemple de fichier qui crée simplement des fichiers .dat à partir de fichiers .txt en les copiant, pour les expérimenter, ressemble à ceci:

.txt.dat:
    copy $< $@

Cela ne fait rien non plus, alors je ne comprends clairement pas comment fonctionnent de telles règles génériques. Dois-je spécifier un objectif au-dessus de la liste des fichiers que je souhaite?

Modifier : en réponse à une nouvelle réponse:

Ce fichier make:

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

avec ce fichier (test.dat)

1
2
3

et cette commande:

NMAKE test.txt

Produit ce message d'erreur:

[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.
Était-ce utile?

La solution

Les règles de modèle NMAKE ressemblent beaucoup à celles de GNU make old-school. Dans votre cas, vous aviez presque le droit de commencer, mais il manquait la déclaration .SUFFIXES. Par exemple:

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

Je pense cependant que cela ne représente qu’une partie de votre solution, car vous avez également indiqué vouloir éviter d’énumérer explicitement tous les fichiers à convertir. Malheureusement, je ne connais pas de moyen très clair de faire cela dans NMAKE, car cela ne fait que développer les caractères génériques dans les listes de dépendances, et ce que vous voulez vraiment dans votre liste de dépendances n'est pas la liste des fichiers existants (le fichier * .bmml fichiers), mais la liste des fichiers qui seront créés à partir de ces fichiers (les fichiers * .png). Néanmoins, je pense que vous pouvez atteindre votre objectif avec une invocation NMAKE récursive comme ceci:

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

Ici, NMAKE développera *.bmml la liste des prérequis pour all dans la liste des fichiers .bmml du répertoire, puis démarrera une nouvelle instance NMAKE, en spécifiant les objectifs à construire en tant que liste de fichiers. avec toutes les instances de .bmml remplacées par .png. Alors, tout mettre ensemble:

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

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

Si je crée les fichiers Test1.bmml et Test2.bmml, puis que j'exécute ce fichier Make, j'obtiens le résultat suivant:

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

Bien sûr, si vous avez un grand nombre de ces fichiers .bmml, vous risquez de ne pas respecter les limites de longueur de ligne de commande, alors faites bien attention à cela. Dans ce cas, je vous recommande de lister explicitement les fichiers source ou d'utiliser un outil de création plus performant, tel que GNU make (disponible sous différentes formes pour Windows).

Autres conseils

Cela fonctionnera-t-il pour vous? Mettez ceci dans MAKEFILE.:

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

Puis exécutez:

nmake /A

Je n'ai pas Balsamiq, donc je ne peux pas le tester, mais dans mon cas, si j'ai le MAKEFILE suivant:

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

et exécutez nmake /A dans un dossier avec myFile.txt, cela créera myFile.dat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top