Você deseja implementar uma classe autoloader, um verificador de arquivos com cache: link .
Muitas vezes me vejo precisando disso:
Digamos que você tenha um arquivo test.c
; inclui outros arquivos, digamos:
#include <stdio.h>
#include "mylib.h"
#include "../mylib_extra.h"
#include "../mylib_bonus.h"
...
... então, digamos, "mylib.h" no mesmo diretório, também carrega outra coisa:
#include <special.h>
#include "/path/to/calculator.h"
#include "testing/tester.h"
...
... etc. Agora, algumas dessas declarações referem-se aos diretórios do sistema, que devem ser conhecidos de antemão - mas, em princípio, eu acho que seria possível escrever uma ferramenta, que deu um padrão da instrução "include" , poderia recursivamente abrir todos os arquivos referidos no arquivo inicial, procurar as mesmas instruções lá, abrir arquivos ainda mais - até desenhar um mapa de árvore. Itens que não puderam abrir sem o conhecimento do caminho, seriam marcados.
Eu imaginaria uma ferramenta como essa funcionando assim (onde os arquivos encontrados / abertos são marcados com um (*) e nenhuma marcação é diferente)
$ ./getincludetree test.c
test.c
- <stdio.h>
- "mylib.h" (*)
-- <special.h>
-- "/path/to/calculator.h" (*)
--- ...
-- "testing/tester.h" (*)
--- ...
- "../mylib_extra.h" (*)
-- ...
- "../mylib_bonus.h" (*)
-- ...
Melhor ainda, se você pudesse especificar um padrão para a instrução include, em vez de #include "..."
, seria possível usar, digamos, \input{...}
e também a mesma ferramenta para encontrar a estrutura de inclusão de um documento Latex.
Existe algo assim lá fora?
Muito obrigado antecipadamente por qualquer resposta,
Felicidades!
Você deseja implementar uma classe autoloader, um verificador de arquivos com cache: link .
Hmmm. Parece que você quer:
Cscope
Ctags
Gnu global
Google esses nomes, acho que deveria ajudá-lo. Eles são indexadores de origem.
Tags command-line linux