Você pode atribuir um curinga a uma variável usando NMAKE? [duplicado]

Dec 17 2020

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

1 wistful Dec 18 2020 at 01:48

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.