使 C 预处理器忽略某些 #include 指令

发布于 2024-07-11 09:07:29 字数 269 浏览 8 评论 0原文

我在这里使用解析器生成器,不幸的是,它坚持在

#include <some/file.h>

每个生成的源文件的顶部放置 a 。 标题早已被重命名。 虽然强制编译器 (gcc) 使用 -include new/header.h 中的新标头没有问题,但从每个生成的文件中删除上述指令会使构建过程变得复杂。

有没有办法告诉 gcc 简单地忽略 some/file.h

I use a parser generator here, that unfortunately insists on putting a

#include <some/file.h>

at the top of every generated source file. The header has since long been renamed. While it is no problem forcing the compiler (gcc) to use the new header with -include new/header.h, removing the above directive from every generated file complicates the build-process.

Is there a way to tell gcc to simply ignore some/file.h?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

等风来 2024-07-18 09:07:29

不,您可以对生成的文件进行后处理 - 我说:不!!!

或者您可以只添加“.” 到您的系统包含目录(或任何本地包含路径 - 确保它也是一个 <> 系统包含路径)。

然后创建一个“some”目录,并将您自己的永久“file.h”粘贴到其中,其中有 1 行用于 #include 并删除您的 -include。

我猜想有一些原因可能不起作用 - 因为在使用 -include 之前,这似乎是更直接、更容易理解的事情。 特别是因为您可以评论传递文件来解释发生了什么。

No. You can post-process your generated file - I say: NO!!!

Or you can just add '.' to your system include directories (or whatever your local include path is - make sure it's also a <> system include path).

Then make a 'some' directory and stick your own permanent 'file.h' in there that has 1 line for #include and get rid of your -include.

I'm guess there's some reason that might not work - cause it seems like the more straight forward and understandable thing to do before using -include. Especially since you can comment the pass-through file to explain what's going on.

请你别敷衍 2024-07-18 09:07:29

some/file.h 替换为空文件。

Replace some/file.h with an empty file.

疯狂的代价 2024-07-18 09:07:29

为什么不建立从 some/file.h 到 new/header.h 的符号链接,并删除 -include 指令?

Why not make a symlink from some/file.h to new/header.h, and remove the -include directive?

情域 2024-07-18 09:07:29

尝试使用预处理器指令,例如#if和#ifdef以及gcc -DSYMBOL=value< /strong> 命令行标志。

例如,如果您使用 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__) */

如果同时具有 <已定义 STDC 和 REQUIRE_STDC 符号。 此外,您的标头可能包含正确的指令,以避免多次包含同一文件:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

此外,您可以 gcc预处理器手册。

Try using preprocessor directives like #if and #ifdef and gcc -DSYMBOL=value command line flag.

In example, if you compile using gcc -DREQUIRE_STDC=1 -o myfile.o myfile.c, and your .c file contains:



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

It will compile using "some/file.h" if have both STDC and REQUIRE_STDC symbols defined. Also your header may include the proper directive to avoid multiple inclusions of the same file:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

Also, you could the gcc preprocessor manual.

千纸鹤 2024-07-18 09:07:29
#include <some/file.h>

可能会以类似的方式开始

#ifndef _FILE_H_
#define _FILE_H_

如果是这样,只需在 #include 命令之前添加 #define _FILE_H_ ,它就会忽略它。
不过,我不确定这是否是最好的解决方案。

#include <some/file.h>

may start as something like

#ifndef _FILE_H_
#define _FILE_H_

If so, just add #define _FILE_H_ before the #include command and it should ignore it.
I'm not sure whether this is the best solution, though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文