Makefile (geração de dependência automática)
apenas para terminologia rápida:
#basic makefile rule
target: dependencies
recipe
O Problema: quero gerar as dependências automaticamentPor exemplo, espero transformar isso:
#one of my targets
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
Nisso
#one of my targets
file.o: $(GENERATE)
$(COMPILE)
e não tenho muita certeza se é possível ..
O que eu sei:Eu posso usar este sinalizador de compilador:
g++ -MM file.cpp
e retornará o destino e a dependência adequado
do exemplo, retornaria:
file.o: file.cpp 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
e qualquer forma, 'make' NÃO me permite escrever explicitamente o código do shell na seção de destino ou dependência de uma regra:
Sei que existe uma função 'make' chamadaConch
mas não consigo conectar isso como dependência e fazer mágica de análise, porque ela depende da macro $ @, que representa o alvo ... ou pelo menos acho que é esse o problema
té tentei substituir a dependência "file.cpp" por essa função makefile e isso também não funcionar
#it's suppose to turn the $@ (file.o) into file.cpp
THE_CPP := $(addsuffix $(.cpp),$(basename $@))
#one of my targets
file.o: $(THE_CPP) 1.h 2.h 3.h 4.h 5.h 6.h 7.h 8.h another.h lots.h evenMore.h
$(COMPILE)
#this does not work
Então, em todo o Google, parece haver duas soluções. ambos os quais não entendo completamente.
Do GNU Make Manual
Algum site que diz que o GNU Make Manual está desatualizado
Então, minha pergunta final é: é possível fazer do jeito que eu quero,
e, se não, alguém pode quebrar o código de um desses sites e me explicar em detalhes como eles funcionam. Vou implementá-lo de uma dessas maneiras, se for necessário, mas estou cansado de colar um pedaço de código no meu makefile antes de entendê-lo