NMAKE kullanarak bir değişkene joker karakter atayabilir misiniz? [çiftleme]

Dec 17 2020

Ben bir UNIX geçmişinden geliyorum, bu nedenle GNU / Make'de buna benzer şeyler yapmaya alışkınım:

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

all: $(OBJ)
    ...

Microsoft NMAKE ile kabaca eşdeğer bir şey olup olmadığını merak ediyorum. Aşağıdaki basit NMAKE Makefile'ım var:

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

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

Bu iyi çalışıyor. Tüm kaynak dosyaları içinden alır src/ve içindeki eşdeğerlerine derler obj/. Ancak, obj/*.objtüm nesne dosyalarını manuel olarak yazmak zorunda kalmamak için varsayılan hedefi bir joker karaktere sıkıştırmak istiyorum .

NMAKE'de bu mümkün mü? NMAKE belgelerini oldukça kapsamlı bir şekilde kontrol ettim ve yapmak istediğim gibi bir şey tanımlamıyor.

GÜNCELLEME :

Bu soruya kabul edilen çözümü referans olarak ve aşağıdaki Makefile'ı kullanarak istediğim etkiyi elde etmeyi başardım :

.SUFFIXES: .c .obj

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

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

Bu, obj\alt klasörü çıktı dizini olarak kullanarak çalışır . $**Makro içinde harcanır allhedefe.

Yanıtlar

1 wistful Dec 18 2020 at 01:48

Alt klasördeki tüm .cdosyaları joker karakterle yazmayı ve aşağıdaki Makefile'ı kullanarak src\bunları alt klasörde .objçıktı olarak derlemeyi başardım obj\:

.SUFFIXES: .c .obj

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

obj_filesdizin adını ve dosya sonekini değiştirmek için çift dize değişikliği yapmam gerektiğinden , $**makro ile tanımlanmalıdır ( allhedefte genişleyecek ). Şimdiye kadar, bulduğum tüm kaynaklar yalnızca tek bir dize ikamesinin nasıl yapılacağını belirtiyor.