Заставьте препроцессор C игнорировать определенные директивы #include
Я использую генератор парсера здесь, который, к сожалению, настаивает на
#include <some/file.h>
в верхней части каждого сгенерированного исходного файла. Заголовок с тех пор давно переименован. Хотя это не проблема, заставляя компилятор (gcc) использовать новый заголовок с -include new/header.h
удаление вышеуказанной директивы из каждого сгенерированного файла усложняет процесс сборки.
Есть ли способ сказать GCC просто игнорировать some/file.h
?
5 ответов
Нет. Вы можете пост-обработать ваш сгенерированный файл - я говорю: НЕТ!!!
Или вы можете просто добавить "." в вашей системе есть каталоги включения (или каков ваш локальный путь включения - убедитесь, что это также <> путь включения системы).
Затем создайте каталог 'some' и вставьте туда свой собственный постоянный файл 'file.h' с 1 строкой для #include и избавьтесь от своего -include.
Я предполагаю, что есть какая-то причина, которая может не сработать - потому что это кажется более простой и понятной вещью перед использованием -include. Тем более, что вы можете прокомментировать файл прохода, чтобы объяснить, что происходит.
Почему бы не создать символическую ссылку из файла /file.h в новый /header.h и удалить директиву -include?
#include <some/file.h>
может начаться как-то так
#ifndef _FILE_H_
#define _FILE_H_
Если это так, просто добавьте #define _FILE_H_
перед #include
команда, и она должна игнорировать это. Я не уверен, что это лучшее решение.
Попробуйте использовать директивы препроцессора, такие как #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 */
Также вы можете ознакомиться с руководством препроцессора gcc.