Czy możesz przypisać symbol wieloznaczny do zmiennej za pomocą NMAKE? [duplikować]

Dec 17 2020

Pochodzę z Uniksa, więc jestem przyzwyczajony do robienia takich rzeczy w GNU / Make:

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

all: $(OBJ)
    ...

Zastanawiam się, czy coś mniej więcej równoważnego można osiągnąć w Microsoft NMAKE. Mam następujący prosty plik Makefile NMAKE:

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

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

To działa dobrze. Pobiera wszystkie pliki źródłowe z src/i kompiluje je do ich odpowiedników w obj/. Chciałbym jednak skondensować domyślny cel do postaci wieloznacznej obj/*.obj, aby nie musieć ręcznie zapisywać wszystkich plików obiektowych.

Czy to możliwe w NMAKE? Sprawdziłem dokładnie dokumentację NMAKE i nie wydaje się, aby opisywała ona coś takiego, co chciałbym zrobić.

AKTUALIZACJA :

Udało mi się uzyskać efekt, który chciałem, używając zaakceptowanego rozwiązania tego pytania jako odniesienia i używając następującego pliku Makefile:

.SUFFIXES: .c .obj

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

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

Działa to przy użyciu obj\podfolderu jako katalogu wyjściowego. $**Makro jest włożony w allcel.

Odpowiedzi

1 wistful Dec 18 2020 at 01:48

Udało mi się zamienić na symbole wieloznaczne wszystkie .cpliki w src\podfolderze i skompilować je do .objwyjścia w obj\podfolderze przy użyciu następującego pliku Makefile:

.SUFFIXES: .c .obj

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

obj_filesmusi być zdefiniowane za pomocą $**makra (które rozwinie się w miejscu alldocelowym), ponieważ musiałem wykonać podwójne podstawienie łańcucha, aby zmienić nazwę katalogu i rozszerzenie pliku. Jak dotąd, wszystkie znalezione przeze mnie zasoby określają tylko, jak wykonać pojedyncze podstawienie łańcucha.