我经常发现自己需要这个:
假设你有一个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
谷歌一下这些名字,相信应该对你有帮助。它们是源索引器。