Заставьте препроцессор C игнорировать определенные директивы #include - PullRequest
0 голосов
/ 13 января 2009

Я использую генератор парсера, который, к сожалению, настаивает на установке

#include <some/file.h>

вверху каждого сгенерированного исходного файла. Заголовок с тех пор давно переименован. Несмотря на то, что нет проблем с принудительным использованием компилятором (gcc) нового заголовка с -include new/header.h, удаление вышеуказанной директивы из каждого сгенерированного файла усложняет процесс сборки.

Есть ли способ заставить gcc просто игнорировать some/file.h?

Ответы [ 5 ]

5 голосов
/ 13 января 2009

Нет. Вы можете пост-обработать ваш сгенерированный файл - я говорю: НЕТ !!!

Или вы можете просто добавить '.' в вашей системе есть каталоги включения (или каков ваш локальный путь включения - убедитесь, что это также <> путь включения системы).

Затем создайте каталог 'some' и вставьте туда свой постоянный файл 'file.h' с 1 строкой для #include и избавьтесь от своего -include.

Полагаю, есть какая-то причина, которая может не сработать, потому что кажется, что перед использованием -include нужно сделать более понятную и понятную вещь Тем более, что вы можете прокомментировать файл прохода, чтобы объяснить, что происходит.

5 голосов
/ 13 января 2009

Заменить some/file.h пустым файлом.

1 голос
/ 13 января 2009

Почему бы не создать символическую ссылку из некоторого / file.h на новый / header.h и удалить директиву -include?

0 голосов
/ 13 января 2009

Попробуйте использовать директивы препроцессора , такие как #if и #ifdef и gcc -DSYMBOL = значение флаг командной строки.

Например, если вы компилируете, используя gcc -DREQUIRE_STDC = 1 -o myfile.o myfile.c , а ваш файл .c содержит:



#if defined(REQUIRE_STDC) && defined(__STDC__)
#include "some/file.h"
#else
#include "another/file.h"
#endif /* defined(REQUIRE_STDC) && defined(__STDC__) */

Он будет компилироваться с использованием some / file.h, если определены оба символа STDC и REQUIRE_STDC. Также ваш заголовок может содержать правильную директиву, чтобы избежать нескольких включений одного и того же файла:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

Кроме того, вы можете руководство препроцессора *1017*.

0 голосов
/ 13 января 2009
#include <some/file.h>

может начинаться как

#ifndef _FILE_H_
#define _FILE_H_

Если это так, просто добавьте #define _FILE_H_ перед командой #include, и она должна игнорироваться. Я не уверен, что это лучшее решение.

...