2009-01-13 91 views
0

我在这里使用一个解析器生成,不幸坚持把一个让C预处理器忽略某些#include指令

#include <some/file.h> 

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

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

回答

5

不,你可以后处理你生成的文件 - 我说:不!

或者您可以只添加'。'到你的系统包括目录(或者你的本地包含路径 - 确保它也是一个包含路径的系统)。

然后创建一个'some'目录,并在那里有一个#include的1行代码,并去掉你的-include。

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

5

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

+0

不,因为它是系统标题。但用-I。无论如何,可以让gcc找到它。谢谢。 – 2009-01-13 17:54:57

1

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

+0

因为它曾经是一个生活在/ usr/include中的系统头文件。不需要修改/ usr/include来编译一些应用程序。 – 2009-01-13 23:36:43

0
#include <some/file.h> 

开始可能是有点像

#ifndef _FILE_H_ 
#define _FILE_H_ 

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

+0

为了这个工作,它必须首先找到一些/ file.h文件。 – 2009-01-13 23:37:17

0

尝试使用preprocessor指令,如#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__) */ 

它将编译使用“一些/文件。 h“,如果同时有STDC和REQUIRE_STDC符号定义。此外,您的头可以包括适当的指令,以避免同一文件的多个夹杂物:



#ifndef MY_HEADER_FILE 
#define MY_HEADER_FILE 1 

/* your C declarations here */ 

#endif /* MY_HEADER_FILE */ 

此外,您还可以在gcc preprocessor手册。

+0

这对普通的源文件是可能的。在我的情况下,源是即时生成的,并且我没有对其结果输出进行必要的控制。 – 2009-01-13 23:39:22