Предварительная обработка произвольных проектов C

Я хочу написать хорошую программу callgraph на python, и по этой причине я использую pycparser. Pycparser должен предварительно обработать файлы c, чтобы правильно создать абстрактное синтаксическое дерево. Мой первый подход состоял в том, чтобы использовать только -E опцию gcc для файлов и затем передать ее pycparser. Но с разными проектами я получаюNo such file or directory"ошибки, потому что gcc не находит определенные заголовки. Если я попытаюсь предварительно обработать ядро ​​Linux с gcc -E `find | grep "\.c"\` он пропускает некоторые заголовочные файлы, такие как файлы с префиксом Linux/, поскольку такой папки нет. Мне кажется, что мне нужны некоторые дополнительные флаги для gcc, чтобы передать расположение заголовочных файлов и правильно обработать. Есть ли общий способ предварительной обработки произвольных проектов C?

Кроме того, я предполагаю, что, если мне удастся правильно выполнить предварительную обработку, в разных файлах будет несколько копий одной и той же функции. Есть ли способ определить исходный файл функции?

1 ответ

Вы должны прочитать о том, как GCC находит заголовочные файлы, по крайней мере, включая ключи командной строки компилятора и переменные среды для путей поиска.

Я подозреваю, что сценарии сборки для различных переменных конфигурации набора проектов влияют на то, как GCC находит файлы заголовков для любой конкретной компиляции. Многие такие сценарии даже выполняют подстановку макросов в командной строке, что означает, что вы должны знать, что делает сценарий.

Если вы изолируете исходный файл C от скрипта make, который устанавливает контекст сборки, GCC не найдет правильные заголовки. И это твоя проблема.

Вам, вероятно, нужно запустить сценарии сборки и перехватить вызовы GCC, чтобы получить необходимый контекст.

Другие вопросы по тегам