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/*.obj
para 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 all
meta.
Respostas
Eu consegui caracterizar todos os .c
arquivos na src\
subpasta e compilá-los para a .obj
saí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_files
tem que ser definido com a $**
macro (que irá expandir no all
destino) 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.