Können Sie einer Variablen mit NMAKE einen Platzhalter zuweisen? [Duplikat]
Ich komme aus einem UNIX-Hintergrund, daher bin ich es gewohnt, solche Dinge in GNU / Make ausführen zu können:
SRC=$(wildcard src/*.c) OBJ=$(SRC:.c=.o)
all: $(OBJ)
...
Ich frage mich, ob in Microsoft NMAKE etwas in etwa gleichwertiges erreicht werden kann. Ich habe das folgende einfache NMAKE Makefile:
all: obj\a.obj obj\b.obj obj\c.obj
{src\}.c{obj\}.obj:
cl /c $** /Fo$@
Das funktioniert gut. Es nimmt alle Quelldateien aus src/
und kompiliert sie zu ihren Entsprechungen in obj/
. Ich möchte jedoch das Standardziel auf einen Platzhalter wie diesen komprimieren obj/*.obj
, damit ich nicht alle Objektdateien manuell ausschreiben muss.
Ist das in NMAKE möglich? Ich habe die NMAKE-Dokumentation ziemlich gründlich durchgesehen und sie scheint nichts zu beschreiben, was ich tun möchte.
UPDATE :
Ich habe es geschafft, den gewünschten Effekt zu erzielen, indem ich die akzeptierte Lösung für diese Frage als Referenz und das folgende Makefile verwendet habe:
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj)
all: src\*.c
@$(MAKE) $(obj_files:src=obj)
{src\}.c{obj\}.obj:
cl /c $< /Fo$@
Dies funktioniert unter Verwendung des obj\
Unterordners als Ausgabeverzeichnis. Das $**
Makro wird innerhalb des all
Ziels verbraucht .
Antworten
Ich habe es geschafft, alle .c
Dateien im src\
Unterordner mit einem Platzhalter zu versehen und sie mit dem folgenden Makefile für die .obj
Ausgabe im obj\
Unterordner zu kompilieren :
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj) all: src\*.c @$(MAKE) $(obj_files:src=obj) {src\}.c{obj\}.obj: cl /c $< /Fo$@
obj_files
muss mit dem $**
Makro definiert werden (das im all
Ziel erweitert wird), da ich eine doppelte Zeichenfolgenersetzung durchführen musste, um den Verzeichnisnamen und das Dateisuffix zu ändern. Bisher geben alle gefundenen Ressourcen nur an, wie eine einzelne Zeichenfolgenersetzung durchgeführt werden soll.