我有这个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.y.c
,必须事先通过bison
util生成。换句话说,如果我忘记在它之前运行main.c
,我就无法编译bison main.y
文件。这完全没问题,这就是我想要的。现在我正在尝试使用以下命令从.d
构建Makefile
文件:
$ c++ -MM main.c > main.d
main.cpp:2:10: error: main.y.c: No such file or directory
我在这里失败了,因为main.y.c
还没准备好。我认为我应该在#include
文件中引用我的main.c
指令,使其对c++ -MM
进程不可见。
答案 0 :(得分:3)
这听起来像是一个makefile的工作。您可以设置依赖项,main.c
取决于main.y.c
,main.y.c
有一条规则可以从野牛代码构建它。
答案 1 :(得分:1)
您可以在makefile中指明main.c
取决于main.y.c
,以便它在尝试编译bison
之前运行main.c
进程。
作为替代方案(我认为可能不是您想要做的)是您可以让您的makefile将宏传递给编译器以指示main.y.c
是否存在并使用{{1} }包含(或不包含)#if
的指令。
main.y.c