从命令行递归提取包含的文本文件文档的树结构?

从命令行递归提取包含的文本文件文档的树结构?

我经常发现自己需要这个:

假设你有一个test.c文件;它包含其他文件,例如:

#include <stdio.h>
#include "mylib.h"
#include "../mylib_extra.h"
#include "../mylib_bonus.h"
...

...然后,假设同一目录中的“mylib.h”还会加载其他内容:

#include <special.h>
#include "/path/to/calculator.h"
#include "testing/tester.h"
...

...等等。现在,其中一些语句引用了系统目录,必须事先知道这些目录 - 但原则上,我猜可以编写一个工具,给定“include”语句的模式,可以递归打开初始文件中引用的所有文件,在那里查找相同的语句,进一步打开文件 - 直到绘制树形图。如果不知道路径就无法打开的项目将被标记。

我想象这样的工具会像这样工作(找到/打开的文件用(*)标记,否则不加标记)

$ ./getincludetree test.c

test.c
- <stdio.h> 
- "mylib.h" (*)
-- <special.h> 
-- "/path/to/calculator.h" (*)
--- ...
-- "testing/tester.h" (*)
--- ...
- "../mylib_extra.h" (*)
-- ...
- "../mylib_bonus.h" (*)
-- ...

更好的是,如果您可以为 include 语句指定一个模式,那么而不是#include "...",人们可以使用,说\input{...}并使用相同的工具来查找 Latex 文档的包含结构。

那里有类似的东西吗?

非常感谢您的任何回答,
干杯!

答案1

您想要实现一个自动加载器类,一个具有缓存功能的文件扫描器:http://anthonybush.com/projects/autoloader/source/

答案2

嗯。看来你想要的是:

Cscope
Ctags
Gnu global

谷歌一下这些名字,相信应该对你有帮助。它们是源索引器。

相关内容