GNU make - transforme todos os pré-requisitos em destino (implicitamente)

eu tenho outromakeferramenta que produz um XML como um artefato depois de analisar meu makefile, que depois processarei mais com o Python.

Isso simplificaria as coisas para mim - muito - se eu pudessemake considere cada pré-requisito único como um destino real, porque essa outra ferramenta classificará cada arquivo como um "trabalho".

Este é um fragmento do meu makefile:

.obj/eventlookupmodel.o: C:/Users/User1/Desktop/A/PROJ/src/AL2HMIBridge/LookupModels/eventlookupmodel.cpp C:\Users\User1\Desktop\A\PROJ\src\AL2HMIBridge\LookupModels\eventlookupmodel.h \
        C:/Users/User1/Desktop/A/PROJ/qt5binaries/include/QtCore/qabstractitemmodel.h \
        C:/Users/User1/Desktop/A/PROJ/qt5binaries/include/QtCore/qvariant.h \
        ...

Eu gostaria demake acho que tenho uma regra fictícia para cada pré-requisito, como abaixo:

C:/Users/User1/Desktop/A/PROJ/qt5binaries/include/QtCore/qvariant.h: 
     @echo target pre= $@

 C:/Users/User1/Desktop/A/PROJ/qt5binaries/include/QtCore/qabstractitemmodel.h: 
    @echo target pre=$@

C:/Users/User1/Desktop/A/PROJ/src/AL2HMIBridge/LookupModels/eventlookupmodel.cpp :
    @echo target pre=$@

C:\Users\User1\Desktop\A\PROJ\src\AL2HMIBridge\LookupModels\eventlookupmodel.h:
    @echo target pre=$@

Não me importo com a forma exata da regra, apenas que cada arquivo é considerado um destino real.

Meu método de passar nesta regra seria definindo a variável MAKEFILES da seguinte maneira

make all MAKEFILES=Dummy.mk

comDummy.mk contendo esta regra para que eu não modifique os makefiles.

Eu tentei o seguinte até agora.

Dummy.mk:

%.h: 
    @echo header xyz = $@

%: 
    @echo other xyz= $@

Isso parcialmente funciona.

eu corromake all --trace --print-data-base MAKEFILES=Dummy.mk e eu posso ver issomake "liga" o%.h: regra para os arquivos de cabeçalho. No--print-data-base section, Vejo essa regra sendo atribuída aos arquivos de cabeçalho.

C:/Users/User1/Desktop/A/QNX_SDK/target/qnx6/usr/include/stddef.h:
#  Implicit rule search has been done.
#  Implicit/static pattern stem: 'C:/Users/User1/Desktop/A/QNX_SDK/target/qnx6/usr/include/stddef'
#  Last modified 2016-05-27 12:39:16
#  File has been updated.
#  Successfully updated.
#  recipe to execute (from '@$(QMAKE) top_builddir=C:/Users/User1/Desktop/A/HMI_FORGF/src/../lib/armle-v7/release/ top_srcdir=C:/Users/User1/Desktop/A/HMI_FORGF/ -Wall CONFIG+=release CONFIG+=qnx_build_release_with_symbols CONFIG+=rtc_build -o Makefile C:/Users/User1/Desktop/A/HMI_FORGF/src/HmiLogging/HmiLogging.pro
', line 2):
@echo header xyz = $@

No entanto, NÃO vejo a regra "echo header xyz $ @" sendo executada.

Sobre a%: regra, não é executado para o.cpp arquivos nem "vinculados" a eles no--print-data-base seção. No entanto, ele é vinculado e executado para destinos existentes que não possuem sufixo, ou seja,

all: library binary

binary: | library
ifs:    | library

Para o%: regra, a razão para esse comportamento é devido a10.5.5 Regras de padrões de correspondência: Se você não marcar a regra de correspondência como terminal, ela não será terminal. Uma regra de correspondência não terminal não pode ser aplicada a um nome de arquivo que indica um tipo específico de dados. Um nome de arquivo indica um tipo específico de dados se algum destino implícito de regra que não corresponda a nada corresponder a ele.

Se eu torná-lo não terminal - sem dois pontos duplos -, a regra não se aplica a tipos internos, como.cppa menos que eu cancele a definição das regras internas que negam minha intenção%: regra.

Se eu torná-lo terminal,"não se aplica a menos que seus pré-requisitos realmente existam". Mas um.h ou.cpp tecnicamente não possui pré-requisitos; posso apenas criar um arquivo fictício e ter isso como pré-requisito?

NOTA: Isso não tem nada a ver comgcc -M geração. sim o-M opção ajudaria no caso específico dos arquivos de cabeçalho e de origem, mas esta pergunta é para destinos e pré-requisitos mais genéricos que já existem no makefile quandomake é lançado.

questionAnswers(2)

yourAnswerToTheQuestion