Pouvez-vous attribuer un caractère générique à une variable à l'aide de NMAKE? [dupliquer]
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/*.obj
pour 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 all
cible.
Réponses
J'ai réussi à joker tous les .c
fichiers du src\
sous - dossier et à les compiler pour les .obj
sortir 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_files
doit être défini avec la $**
macro (qui se développera dans la all
cible) 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.