Bisakah Anda menetapkan wildcard ke variabel menggunakan NMAKE? [duplikat]

Dec 17 2020

Saya berasal dari latar belakang UNIX jadi saya terbiasa melakukan hal-hal seperti ini di GNU / Make:

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

all: $(OBJ)
    ...

Saya ingin tahu apakah sesuatu yang kira-kira setara dapat dicapai di Microsoft NMAKE. Saya punya NMAKE Makefile sederhana berikut ini:

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

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

Ini bekerja dengan baik. Itu mengambil semua file sumber dari src/, dan mengkompilasinya ke padanannya di obj/. Namun, saya ingin menyingkat target default menjadi wildcard obj/*.objsehingga saya tidak perlu menulis semua file objek secara manual.

Apakah ini mungkin di NMAKE? Saya telah memeriksa dokumentasi NMAKE dengan cukup teliti dan sepertinya tidak menjelaskan apa pun yang ingin saya lakukan.

UPDATE :

Saya berhasil mendapatkan efek yang saya inginkan menggunakan solusi yang diterima untuk pertanyaan ini sebagai referensi, dan menggunakan Makefile berikut:

.SUFFIXES: .c .obj

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

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

Ini bekerja menggunakan obj\subfolder sebagai direktori keluaran. The $**makro dikeluarkan dalam allsasaran.

Jawaban

1 wistful Dec 18 2020 at 01:48

Saya berhasil membuat wildcard semua .cfile di src\subfolder, dan mengkompilasinya ke .objoutput di obj\subfolder menggunakan Makefile berikut:

.SUFFIXES: .c .obj

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

obj_filesharus didefinisikan dengan $**makro (yang akan berkembang di alltarget) karena saya perlu melakukan substitusi string ganda untuk mengubah nama direktori dan akhiran file. Sejauh ini, semua sumber daya yang saya temukan hanya menentukan cara melakukan substitusi string tunggal.