Czy możesz przypisać symbol wieloznaczny do zmiennej za pomocą NMAKE? [duplikować]
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 all
cel.
Odpowiedzi
Udało mi się zamienić na symbole wieloznaczne wszystkie .c
pliki w src\
podfolderze i skompilować je do .obj
wyjś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_files
musi być zdefiniowane za pomocą $**
makra (które rozwinie się w miejscu all
docelowym), 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.