Мне часто нужно это:

Скажем, у вас есть файл 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 "..." можно было бы использовать, скажем, \input{...} и использовать тот же инструмент для нахождения структуры включения латекса. документ, а также.

Есть ли что-нибудь подобное там?

Большое спасибо заранее за любые ответы,
Ура!

2 ответа2

1

Вы хотите реализовать класс автозагрузчика, сканер файлов с кэшированием: http://anthonybush.com/projects/autoloader/source/.

1

Хммм. Похоже, что вы хотите:

Cscope
Ctags
Gnu global

Google эти имена, думаю, что это должно помочь вам. Они являются исходными индексаторами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .