[英]How to exclude certain #include directives from C++ stream?
我有这个C ++文件(我们称之为main.cpp
):
#include <string>
#include "main.y.c"
void f(const std::string& s) {
yy_switch_to_buffer(yy_scan_string(s.c_str()));
yyparse();
}
该文件依赖于main.yc
,它必须事先通过bison
util生成。 换句话说,如果我忘记在它之前运行bison main.y
,我就无法编译main.c
文件。 这完全没问题,这就是我想要的。 现在我正在尝试使用以下命令从Makefile
构建.d
文件:
$ c++ -MM main.c > main.d
main.cpp:2:10: error: main.y.c: No such file or directory
我失败了,因为main.yc
尚未准备好。 我认为我应该以某种方式在main.c
文件中引用我的#include
指令,使其对c++ -MM
进程不可见。
这听起来像是一个makefile的工作。 您可以设置依赖关系,以便main.c
依赖于main.yc
,而main.yc
有一个规则来从bison代码构建它。
您可以在makefile中指出main.c
依赖于main.yc
以便在尝试编译main.c
之前运行bison
进程。
作为替代方案(我认为可能不是你想要做的)是你可以让你的makefile将一个宏传递给编译器来指示main.yc
是否存在并使用#if
指令来包含(或不包含) main.yc
#if EXISTS_MAIN_Y_C
#include "main.y.c"
#endif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.