我在这里使用了一个解析器生成器,遗憾的是它坚持放
#include <some/file.h>
位于每个生成的源文件的顶部。该标题早已重命名。虽然强制编译器(gcc)使用带有-include new/header.h
的新标头没有问题,但是从每个生成的文件中删除上述指令会使构建过程复杂化。
有没有办法告诉gcc忽略some/file.h
?
答案 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手册。