Recursivo Tornar destinos de passagem no OS X

0

Eu estou tentando escrever um alvo clean recursivo para o GNU Makefile no OS X (GNU Make 3.81 - do XCode). Seguindo a documentação do GNU Make, eu desenvolvi o seguinte:

Makefile principal

ALLSUBMAKES=$(wildcard ./*/Makefile)
ALLSUBDIRS=$(patsubst %/Makefile,%,$(ALLSUBMAKES))
.PHONY: submakes clean $(ALLSUBDIRS)

submakes: $(ALLSUBDIRS)

clean: $(ALLSUBDIRS)

$(ALLSUBDIRS):
    $(MAKE) -C $@

Makefiles do submake

mainTarget:
    #do something here

clean:
    #some clean operation

O problema:

Acho que $(MAKE) passa apenas o nome do caminho completo do executável make , ignorando os destinos e todas as outras opções de linha de comando (como -j5 , por exemplo). Todos os submakes acabam executando o mainTarget quando emito make clean no nível superior. Qual é o caminho certo para implementar esses alvos limpos recursivos? Ou como passar o alvo junto com todos os argumentos da linha de comando para submakes?

    
por Bichoy 09.03.2016 / 18:56

1 resposta

0

A maneira que eu vi isso é coletar todos os alvos em uma regra que entra em cada subdiretório:

build clean install:
     @for dir in $(ALLSUBDIRS); do $(MAKE) -C "$$dir" $@; done

Você pode usar algo com a variável interna MAKEFLAGS , que é exportada automaticamente para sub-marcas.

Você pode tentar sufixar a ação desejada ao destino e, em seguida, dividir esse pseudo-alvo para extrair a ação novamente mais tarde:

default: $(addsuffix .default,$(ALLSUBDIRS))
clean:   $(addsuffix .clean,$(ALLSUBDIRS))

%.default:
        $(MAKE) -C $*
%.clean:
        $(MAKE) -C $* clean
    
por 10.03.2016 / 09:22