【问题标题】:What does the clang -cc1 option do?clang -cc1 选项有什么作用?
【发布时间】:2012-02-17 23:38:04
【问题描述】:

我是clang 的新手。我已经阅读了一篇关于使用clang 编译器前端从cudaopencl 的源到源转换的论文。

谁能告诉我为什么有时会使用-cc1这个选项?

【问题讨论】:

    标签: compiler-construction llvm clang


    【解决方案1】:

    Clang 编译器前端有几个额外的 Clang 特定功能,这些功能没有通过 GCC 兼容性驱动程序接口公开。 -cc1 参数表示要使用编译器前端,而不是驱动程序。 clang -cc1 功能实现了核心编译器功能。

    所以,简单地说。如果您不提供-cc1,那么您可以期待标准 GCC 的“外观和感觉”。这是绝大多数编译器标志的工作方式,就像您期望它们与 GCC 一起工作一样。如果您传递选项“-cc1”,那么您将设置 Clang 编译器标志。因此,GCC 可能存在差异。

    希望这能让它更清楚一点。

    【讨论】:

    • 为什么clang -cc1 没有立即返回?我希望为带有许多参数的clang -cc1 命令设置别名。当不带参数运行它时,我希望它返回类似clang-7: error: no input files
    • 您可以使用[ -t 0 ] 测试标准输入(0)是否在终端中打开,如alias cc1='if [ -t 0 ]; then clang -cc1; else echo No; fi'。您还可以从包装函数中查看您自己的参数,例如alias cc1='(){ [ $# > 0 ] &&... }';试试这个,如果它无法读取任何参数并且标准输入在终端上,它会中止 clang 调用。 alias cc1='(){ go=false; for a do { [ -r "$a" ] || continue; go=true }; done; if ! $go && [ -t 0 ]; then echo "Sorry" 1>&2; else clang -cc1 $@; fi }'。我不认为[ -r "$a" ] 是防弹的,但它总比$# 好,总比没有好。
    • 如果我不清楚,这就是我认为发生的事情 - 没有参数,clang 退回到从标准输入读取,然后“挂起”无限期地等待文件结束。 (您可以使用 ctrl+d 发送它,但也可以使用 ctrl+c。)开发人员应该已经知道诸如 TTY 标志之类的事情,所以我不得不假设他们选择离开它。这就是我们说的前端,也许它是为交互而设计的,比如 Cling,他们的“C++ 解释器”。
    【解决方案2】:

    通常的编译器由所谓的编译器驱动程序组成,它知道如何执行编译器本身、汇编器、链接器等,以及编译器本身,它只获取源代码(有时已经预处理)并发出汇编器/目标代码。

    Clang 在单个二进制文件中实现所有这些组件,不同之处仅在于 cmdline。这里clang -cc1 使用其内部/未记录的选项集等调用编译器本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2020-01-18
      • 2020-05-25
      • 2016-11-02
      • 2013-11-22
      • 2020-02-21
      相关资源
      最近更新 更多