Können Sie einer Variablen mit NMAKE einen Platzhalter zuweisen? [Duplikat]

Dec 17 2020

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 allZiels verbraucht .

Antworten

1 wistful Dec 18 2020 at 01:48

Ich habe es geschafft, alle .cDateien im src\Unterordner mit einem Platzhalter zu versehen und sie mit dem folgenden Makefile für die .objAusgabe 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_filesmuss mit dem $**Makro definiert werden (das im allZiel 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.