c++ - 不使用预处理器调用 Clang

标签 c++ c clang

我正在编写一个高级语言编译器。我目前使用 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/

相关文章:

c++ - 提取头文件中的函数列表

c++ - 强制使用预定义宏的 gcc 标志

c++ - 了解 getopt() 示例。 int 与 char 的比较

c++ - 不止一个重载函数实例

c++ - 检查 LLVM pass 中的后缘

c++ - 使用可选参数重载 new 和 delete 运算符

c++ - SDL_FillRect() : Unsupported surface format or Segmentation fault

php - 使用 PHP 在 Linux 服务器上运行 C++ 可执行文件

c# - 使用 VS 2010 调试导入的 dll

在 C 中将客户端的字符串十六进制消息转换为服务器上的整数