¿Puedes asignar un comodín a una variable usando NMAKE? [duplicar]

Dec 17 2020

Vengo de un entorno UNIX, así que estoy acostumbrado a poder hacer cosas como esta en GNU / Make:

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

all: $(OBJ)
    ...

Me pregunto si se puede lograr algo más o menos equivalente en Microsoft NMAKE. Tengo el siguiente Makefile NMAKE simple:

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

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

Esto funciona bien. Toma todos los archivos de origen src/y los compila con sus equivalentes en obj/. Sin embargo, me gustaría condensar el destino predeterminado en un comodín como obj/*.objpara no tener que escribir todos los archivos de objeto manualmente.

¿Es esto posible en NMAKE? Revisé la documentación de NMAKE bastante a fondo y no parece describir nada parecido a lo que quiero hacer.

ACTUALIZAR :

Logré obtener el efecto que quería usando la solución aceptada para esta pregunta como referencia y usando el siguiente Makefile:

.SUFFIXES: .c .obj

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

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

Esto funciona usando la obj\subcarpeta como directorio de salida. La $**macro se gasta dentro del allobjetivo.

Respuestas

1 wistful Dec 18 2020 at 01:48

Me las arreglé para usar comodines en todos los .carchivos en la src\subcarpeta y compilarlos para .objgenerarlos en la obj\subcarpeta usando el siguiente Makefile:

.SUFFIXES: .c .obj

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

obj_filesdebe definirse con la $**macro (que se expandirá en el alldestino) porque necesitaba hacer una sustitución de cadena doble para cambiar el nombre del directorio y el sufijo del archivo. Hasta ahora, todos los recursos que he encontrado solo especifican cómo hacer una sustitución de una sola cadena.