我正在编写一个高级语言编译器。我目前使用 C 作为目标,然后使用 clang 进行最终编译和链接。我将使用 Boehm 垃圾收集器。我可以将目标切换到 C++,这样我就可以使用 C++ 异常处理运行时。除此之外,我不打算使用 C++ 的任何额外功能。
我对 Clang 的了解有限,但我知道它比 gcc 更加模块化,并且如果想将编译器链接到专有代码,它拥有更自由的许可证。我目前正在 Scala 中编写编译器,并通过 exec 系统调用调用 Clang 应用程序。不过,如果需要,我可以使用 JNI 调用 native C/C++ 函数。
有没有办法跳过 Clang 编译器的预处理器和模板评估阶段,从而节省编译时间。我不需要使用头文件,因为我可以为每个 C/C++ 源文件生成所需的函数原型(prototype)。
最佳答案
默认情况下,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++ 模板扩展。
关于c++ - 不使用预处理器调用 Clang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808867/