Você pode atribuir um curinga a uma variável usando NMAKE? [duplicado]
Eu venho de um ambiente UNIX, então estou acostumado a ser capaz de fazer coisas assim no GNU / Make:
SRC=$(wildcard src/*.c) OBJ=$(SRC:.c=.o)
all: $(OBJ)
...
Estou me perguntando se algo aproximadamente equivalente a ser realizado no Microsoft NMAKE. Eu tenho o seguinte Makefile NMAKE simples:
all: obj\a.obj obj\b.obj obj\c.obj
{src\}.c{obj\}.obj:
cl /c $** /Fo$@
Isso funciona bem. Ele pega todos os arquivos de origem src/e os compila em seus equivalentes em obj/. No entanto, gostaria de condensar o destino padrão em um caractere curinga, obj/*.objpara não ter que escrever todos os arquivos-objeto manualmente.
Isso é possível no NMAKE? Eu verifiquei a documentação do NMAKE completamente e não parece descrever nada parecido com o que eu quero fazer.
ATUALIZAÇÃO :
Consegui obter o efeito que queria usando a solução aceita para esta questão como referência e usando o seguinte Makefile:
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj)
all: src\*.c
@$(MAKE) $(obj_files:src=obj)
{src\}.c{obj\}.obj:
cl /c $< /Fo$@
Isso funciona usando a obj\subpasta como o diretório de saída. A $**macro é gasta dentro da allmeta.
Respostas
Eu consegui caracterizar todos os .carquivos na src\subpasta e compilá-los para a .objsaída na obj\subpasta usando o seguinte Makefile:
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj) all: src\*.c @$(MAKE) $(obj_files:src=obj) {src\}.c{obj\}.obj: cl /c $< /Fo$@
obj_filestem que ser definido com a $**macro (que irá expandir no alldestino) porque eu precisei fazer uma substituição de string dupla para alterar o nome do diretório e o sufixo do arquivo. Até agora, todos os recursos que encontrei apenas especificam como fazer uma única substituição de string.