0

我在这里使用了一个解析器生成器,不幸的是它坚持要放置一个

#include <some/file.h>

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

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

4

5 回答 5

5

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

于 2009-01-13T17:41:08.087 回答
5

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

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

然后创建一个'some'目录并将你自己的永久'file.h'粘贴在其中有1行用于#include并摆脱你的-include。

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

于 2009-01-13T17:42:41.250 回答
1

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

于 2009-01-13T18:45:58.207 回答
0
#include <some/file.h>

可能开始像

#ifndef _FILE_H_
#define _FILE_H_

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

于 2009-01-13T18:50:01.490 回答
0

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

例如,如果您使用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 符号,它将使用“some/file.h”进行编译。此外,您的标头可能包含正确的指令,以避免多次包含同一文件:



#ifndef MY_HEADER_FILE
#define MY_HEADER_FILE 1

/* your C declarations here */

#endif /* MY_HEADER_FILE */

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

于 2009-01-13T19:04:16.360 回答