Pergunta

Alguma boa sugestão?A entrada será o nome de um arquivo de cabeçalho e a saída deverá ser uma lista (de preferência uma árvore) de todos os arquivos incluindo-o direta ou indiretamente.

Foi útil?

Solução

Se você tiver acesso ao GCC/G++, então o -M opção gerará a lista de dependências.Ele não faz nenhuma das coisas extras que as outras ferramentas fazem, mas como vem do compilador, não há chance de ele pegar arquivos do lugar "errado".

Outras dicas

Obrigado a Keith B.Procurei a documentação de cl.exe (VS2008) e encontrei o sinalizador /showIncludes.No IDE, isso pode ser definido na página de propriedades de qualquer arquivo CPP.

Screen shot

Para uma solução pesada, você deve verificar doxigênio.Ele examina sua base de código e cria um site que documenta seu código.Uma das muitas coisas que mostra é incluir árvores.

Se você deseja conectar a saída desta ferramenta a algum outro processo, isso pode não funcionar para você (embora o doxygen produza para outros formatos, não estou familiarizado com esse recurso).Se você simplesmente deseja observar as dependências, isso deve funcionar muito bem.

Eu brinquei com uma ferramenta chamada cinclude2dot.Foi muito útil para controlar uma base de código bastante grande quando vim trabalhar aqui.Na verdade, pensei em eventualmente integrá-lo em nossa construção diária.

Primeiro, cinclude2dot.pl é um script perl que analisa o código C/C++ e produz um gráfico de dependência #include como um arquivo de pontos para entrada no graphviz.

http://www.flourish.org/cinclude2dot/

Se você não quiser seguir esse tipo de ferramenta manual, então o vencedor de longe é, na minha opinião, uma ferramenta conhecida como "IncludeManager" do ProFactor.

http://www.profactor.co.uk/includemanager.php

Há um teste gratuito e é incrível.É um plug-in para Visual Studio totalmente integrado, então clicar duas vezes em algo aqui leva você ao local onde está incluído ali.

As dicas de ferramentas fornecem todas as informações que você deseja e permitem detalhar/aumentar, remover subárvores inteiras com as quais você não se importa, visualizar representações que não sejam gráficos, percorrer uma lista de correspondências para isso e aquilo, é maravilhoso.

Se você for rápido, poderá refatorar a estrutura #include de grandes projetos antes que o teste termine.Mesmo assim, não custa muito, cerca de US$ 35 por licença.

Para o que faz, é quase perfeito.Não apenas #include gráficos, mas também dependências cruzadas de arquivos compartilhados, impacto nos tempos de construção, propriedades detalhadas em grades, perfeito.

Boas notícias: redhat Source-Navigator (funciona no Windows também).É claro que as opções do compilador (mencionadas anteriormente) têm análise superior e não tenho certeza de como isso lidará com MFC, Qt e suas palavras-chave mágicas.

redhat Source-Navigator

Construindo em Resposta de KeithB, aqui está a sintaxe do GNUmake para 1) gerar automaticamente os arquivos de dependência, 2) mantê-los atualizados e 3) usá-los em seu makefile:

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(Certifique-se de alterar esses recuos para hardtabs.)

Entenda para C++ deve ser capaz de ajudá-lo:ele constrói um banco de dados que você pode acessar em Perl.

escopo (http://cscope.sourceforge.net/) faz isso em um xterm independente e também pode ser usado dentro do seu editor favorito - possui ótimo suporte para emacs e vi/vim.

Existe uma ferramenta gratuita Incluir observador de dependências de arquivo

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