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