Compiler construction clang-cc1选项的作用是什么?

Compiler construction clang-cc1选项的作用是什么?,compiler-construction,llvm,clang,Compiler Construction,Llvm,Clang,我是clang的新手。我读过一篇关于使用clang编译器前端从cuda到opencl的源代码到源代码转换的论文 有谁能告诉我为什么有时会使用选项-cc1?Clang编译器前端有几个额外的特定于Clang的特性,这些特性没有通过GCC兼容性驱动程序接口公开。-cc1参数表示要使用编译器前端,而不是驱动程序。clang-cc1功能实现了核心编译器功能 所以,简单地说。如果您没有给出-cc1,那么您可以期待标准GCC的“外观”。这就是绝大多数编译器标志的工作原理,就像您希望它们与GCC一起工作一样。如

我是
clang
的新手。我读过一篇关于使用
clang
编译器前端从
cuda
opencl
的源代码到源代码转换的论文


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

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

所以,简单地说。如果您没有给出
-cc1
,那么您可以期待标准GCC的“外观”。这就是绝大多数编译器标志的工作原理,就像您希望它们与GCC一起工作一样。如果您传递了选项“-cc1”,那么您将获得Clang编译器标志集。因此,GCC可能存在差异


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

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


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

为什么
clang-cc1
不会立即返回?我希望为带有许多参数的
clang-cc1
命令设置别名。当在没有参数的情况下运行它时,我希望它返回类似于
clang-7:error:no input files
。您可以测试stdin(0)是否在具有
[-t0]
的终端中打开,如
alias cc1='if[-t0];然后叮当-cc1;否则,就没有回音;fi'
。您还可以从包装器函数中查看自己的参数,如
alias cc1='(){[$\35;>0]&&&……}
;试试这个,如果它不能读取任何arg并且stdin在终端上,它就会中止叮当声调用<代码>别名cc1='(){go=false;对于do{[-r“$a”]| |继续;go=true};完成;如果!$go&&[-t 0];则回显“对不起”1>&2;否则会发出叮当声-cc1$@;fi}。我不认为
[-r“$a”]
是防弹的,但它总比
$#
好,而且这总比什么都没有好。如果我不清楚,我想这就是发生的事情——没有参数,clang会返回到从stdin读取,然后无限期地“挂起”等待文件结束。(你可以用ctrl+d发送一个,但你也可以用ctrl+c)开发者应该已经知道TTY标志之类的事情,所以我不得不假设他们选择离开它。这是我们正在谈论的前端,也许它是为交互而设计的,就像Cling,他们的“C++解释器”。