我在这里使用了一个解析器生成器,不幸的是它坚持要放置一个
#include <some/file.h>
在每个生成的源文件的顶部。标题早已被重命名。虽然强制编译器(gcc)使用新的头文件没有问题-include new/header.h
,但从每个生成的文件中删除上述指令会使构建过程复杂化。
有没有办法告诉 gcc 简单地忽略some/file.h
?
我在这里使用了一个解析器生成器,不幸的是它坚持要放置一个
#include <some/file.h>
在每个生成的源文件的顶部。标题早已被重命名。虽然强制编译器(gcc)使用新的头文件没有问题-include new/header.h
,但从每个生成的文件中删除上述指令会使构建过程复杂化。
有没有办法告诉 gcc 简单地忽略some/file.h
?
替换some/file.h
为空文件。
不,您可以对生成的文件进行后处理 - 我说:不!
或者您可以添加“。” 到您的系统包含目录(或任何您的本地包含路径 - 确保它也是 <> 系统包含路径)。
然后创建一个'some'目录并将你自己的永久'file.h'粘贴在其中有1行用于#include并摆脱你的-include。
我猜有一些原因可能不起作用 - 因为在使用 -include 之前,这似乎是更直接和更容易理解的事情。特别是因为您可以评论传递文件以解释发生了什么。
为什么不创建从 some/file.h 到 new/header.h 的符号链接,并删除 -include 指令?
#include <some/file.h>
可能开始像
#ifndef _FILE_H_
#define _FILE_H_
如果是这样,只需在命令#define _FILE_H_
之前添加#include
,它应该忽略它。不过,我不确定这是否是最好的解决方案。
尝试使用预处理器指令,如 #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 预处理器手册。