如何从C ++流中排除某些#include指令?

时间:2010-07-15 13:40:40

标签: c++ makefile

我有这个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进程不可见。

2 个答案:

答案 0 :(得分:3)

这听起来像是一个makefile的工作。您可以设置依赖项,main.c取决于main.y.cmain.y.c有一条规则可以从野牛代码构建它。

答案 1 :(得分:1)

您可以在makefile中指明main.c取决于main.y.c,以便它在尝试编译bison之前运行main.c进程。

作为替代方案(我认为可能不是您想要做的)是您可以让您的makefile将宏传递给编译器以指示main.y.c是否存在并使用{{1} }包含(或不包含)#if的指令。

main.y.c