Pergunta

Nós usamos o GNU make para o nosso sistema. No final de nossos makefiles, temos um incluem chamado Makedepends o que gera um monte de arquivos .d usando interruptor -MM no gcc. Em seguida, incluir o arquivo .d para cada arquivo .cc usando um include $ (CXXFILES: .cc = .d) linha. Mas quando os arquivos de arquivo ou mover de exclusão, as dependências passo breaks e temos que apagar manualmente os arquivos .d (mesmo um make clean não funciona porque as dependências falha)

Existe uma maneira para gerar esses arquivos dependência .d ou incluir esses arquivos .d de dependência que normalmente lidam com a eliminação de ficheiros ou deslocalização?

EDIT: Por exemplo: Eu tenho serial.cc e os makefiles gerar um arquivo serial.d que tem uma dependência em buffer.h mas então eu mudá-lo para que eu não precisa buffer.h mais e eu tampão de exclusão .h. Da próxima vez eu corro marca, ele vai sufocar porque inclui o arquivo .d que ainda faz serial.o dependem buffer.h.

Foi útil?

Solução

http://make.mad-scientist.net/papers / avançado de auto-dependência geração tem uma descrição desse problema exato, e um par de maneiras de contornar isso. O primeiro é um pouco equivocada, mas o "avançado" é essencialmente local.

Outras dicas

Duas possibilidades:

Em primeiro lugar, você pode adicionar uma regra para o seu Makefile para executar a etapa dependência:

.SUFFIXES: .d

%.d::
   makedepend_command_here

Se não, então a partir da seção Last Resort da página info para GNU make:

Por exemplo, ao testar uma makefile, você pode não se importam se o arquivos de origem contêm dados reais, única que eles existem. Então você pode fazer isto:

 %::
         touch $@

para fazer com que todos os arquivos de origem necessários (Como pré-requisitos) a ser criada automaticamente.

Será que este trabalho para criar arquivos .d vazios para você?

Se você usar makepp com o --rm-stale opção, ele vai notar arquivos que não são mais edificável e removê-los . Se este é um caso de uso normal para você, você pode colocar essa opção em .makepprc na raiz de sua árvore de construção, e vai ser sempre utilizado.

Mas então é claro makepp alças tudo isso detecção dependência em si, de modo que você não precisa encher o seu makefile. É ainda melhor do que a sua abordagem, porque ele pode gerar cabeçalhos no tempo necessário para o compilador para pegar, onde gcc -MM falharia.

Há muito mais para makepp. Além de fazer quase tudo o que GNU make pode, há muitas coisas mais úteis, e você pode até mesmo estender sua makefiles com alguma programação Perl.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top