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

时间:2009-01-13 17:37:34

标签: c gcc include build-process c-preprocessor

我在这里使用了一个解析器生成器,遗憾的是它坚持放

#include <some/file.h>

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

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

没有。您可以对生成的文件进行后期处理 - 我说:NO !!!

或者你可以添加'。'到您的系统包括目录(或任何您的本地包含路径 - 确保它也是&lt;&gt;系统包含路径)。

然后创建一个'some'目录并将你自己的永久'file.h'放在那里,其中包含#include的1行并删除你的-include。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

#include <some/file.h>

可能会像

那样开始
#ifndef _FILE_H_
#define _FILE_H_

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

答案 4 :(得分:0)

尝试使用preprocessor指令,例如#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 preprocessor手册。