найти, присутствует ли строка прямо или косвенно во всех файлах - PullRequest
1 голос
/ 05 октября 2011

У меня есть набор файлов c, и мне нужно выяснить, присутствует ли конкретный заголовочный файл прямо или косвенно во всех файлах.

For ex:-
Header files:-

hf1.h:-
int i = 10;

hf2.h:-
#include "hf1.h"

hf3.h:-
#include <hf1.h>

hf4.h:-
#include <hf3.h>

c files:-
cf1.c:-
#include <hf1.h>

cf2.c:-
#include <hf2.h>

cf3.c:-
#include <hf4.h>

В этом случае hf4.h косвенно включает hf1.hфайл.Мне нужно выяснить, включен ли hf1.h прямо или косвенно во все файлы.Дайте мне знать, если кому-то понадобятся дополнительные разъяснения.

Любые команды Unix или сценарии оболочки для решения этой проблемы.

Ответы [ 3 ]

3 голосов
/ 05 октября 2011
  1. Введение директивы #error в hf1.h
  2. make clean
  3. make -k all
  4. Все существующие объектные файлы не включают hf1.h

Шаг -k является решающим: он гарантирует, что компиляция продолжается после первого поврежденного файла.

1 голос
/ 05 октября 2011

Долгий путь - использовать параметр -E в gcc (с этим параметром он фактически выдает выходные данные только после предварительной обработки, компиляция не выполняется) для всех файлов c, а затем искать части каждого заголовочного файла.во всех выходах.Обновится, если на ум придет какой-нибудь более короткий метод.

0 голосов
/ 05 октября 2011

Если у вас нет кодов, подобных

#include               <hf1.h>
#include \
<hf1.h>

тогда поиск прямых включений - это просто

grep -l '#include .hf1\.h'

команда. Для нахождения косвенных включений предлагаю поставить

#error "hf1_included"

в hf1.h и скомпилируйте все файлы (например, "make -k" или аналогичный). Захват stderr и поиск hf1_included. Это даст список файлов, которые прямо или косвенно включают hf1.h. Теперь вы можете извлечь список только косвенных включений, также принимая во внимание первый список только прямых включений. Вы можете использовать программу comm для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...