在没有预处理器的情况下调用 Clang

Call Clang without preprocessor

我正在编写高级语言编译器。我目前使用 C 作为我的目标,然后使用 clang 进行最终编译和 linking。我将使用 Boehm 垃圾收集器。我可能会将目标切换到 C++,以便我可以使用 C++ 异常处理运行时。除此之外,我不打算使用 C++ 的任何额外功能。

我对 Clang 的了解有限,但我知道它旨在比 gcc 更加模块化,并且如果想要将编译器 link 编译成专有代码,它具有更自由的许可。我目前正在用 Scala 编写编译器并通过 exec 系统调用调用 Clang 应用程序。但是,如果需要,我可以使用 JNI 调用本机 C / C++ 函数。

那么有没有办法跳过 Clang 编译器的预处理器和模板评估阶段,从而节省编译时间。我不需要使用头文件,因为我可以为每个 C/C++ 源文件生成所需的函数原型。

默认情况下,clang 和 gcc 将根据文件扩展名确定输入语言。如果您的输入文件的扩展名是 .i,它将被解释为预处理的 C; .ii 是经过预处理的 C++。

您可以使用 -x <language> 参数明确指定输入文件的语言。对于 C 预处理输入,您可以将 <language> 指定为 cpp-output。对于 C++ 预处理输入,您可以将 <language> 指定为 c++-cpp-output

我找不到这方面的 clang 文档,但由于 clang 和 gcc 具有几乎相同的用户界面,here's a link to the gcc documentation for specifying language using file extension and -x

我不知道有什么方法可以跳过 C++ 模板扩展。