Pouvez-vous attribuer un caractère générique à une variable à l'aide de NMAKE? [dupliquer]

Dec 17 2020

Je viens d'un arrière-plan UNIX, donc j'ai l'habitude de pouvoir faire des choses comme ça dans GNU / Make:

SRC=$(wildcard src/*.c) OBJ=$(SRC:.c=.o)

all: $(OBJ)
    ...

Je me demande si quelque chose à peu près équivalent à accomplir dans Microsoft NMAKE. J'ai le fichier Makefile NMAKE simple suivant:

all: obj\a.obj obj\b.obj obj\c.obj 

{src\}.c{obj\}.obj:
    cl /c $** /Fo$@

Cela fonctionne très bien. Il prend tous les fichiers source src/et les compile dans leurs équivalents dans obj/. Cependant, j'aimerais condenser la cible par défaut en un caractère générique comme obj/*.objpour ne pas avoir à écrire tous les fichiers objets manuellement.

Est-ce possible dans NMAKE? J'ai vérifié assez soigneusement la documentation NMAKE et elle ne semble pas décrire quoi que ce soit comme ce que je veux faire.

MISE À JOUR :

J'ai réussi à obtenir l'effet que je voulais en utilisant la solution acceptée à cette question comme référence et en utilisant le Makefile suivant:

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj)
all: src\*.c
    @$(MAKE) $(obj_files:src=obj)

{src\}.c{obj\}.obj:
    cl /c $< /Fo$@

Cela fonctionne en utilisant le obj\sous - dossier comme répertoire de sortie. La $**macro est dépensée dans la allcible.

Réponses

1 wistful Dec 18 2020 at 01:48

J'ai réussi à joker tous les .cfichiers du src\sous - dossier et à les compiler pour les .objsortir dans le obj\sous - dossier à l'aide du Makefile suivant:

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj) all: src\*.c @$(MAKE) $(obj_files:src=obj) {src\}.c{obj\}.obj: cl /c $< /Fo$@

obj_filesdoit être défini avec la $**macro (qui se développera dans la allcible) car j'avais besoin de faire une double substitution de chaîne afin de changer le nom du répertoire et le suffixe du fichier. Jusqu'à présent, toutes les ressources que j'ai trouvées spécifient uniquement comment effectuer une substitution de chaîne unique.