Clang/LLVM是否有等同于.spec的文件,我在哪里可以找到参考

Is there an equivalent to .spec files for Clang/LLVM and where can I find a reference?

本文关键字:在哪里 参考 文件 是否 LLVM 等同于 spec Clang      更新时间:2023-10-16

gcc驱动程序可以配置为使用.specs文件使用特定的链接器,特定的选项和其他细节(例如覆盖系统头)。

GCC(4.9.0)版本的当前(撰写本文时)手册在这里描述了规范文件。

Clang/LLVM是否有类似的机制?显然Clang也有驱动程序的概念,但我无法提出任何文档来说明Spec文件或类似的机制是否存在于Clang中,以及如何使用它们。

我对C和c++都感兴趣,但可能指向它们中的任何一个的指针都会让我开始。

目标是覆盖系统头文件和库路径,以及前面简要提到的链接器。

根据文档,Clang驱动程序没有与GCC规范文件直接对应的文件:

clang驱动没有"specs"的直接对应。规范中嵌入的大部分功能都在工具特定的参数转换例程中。规范中控制编译管道的部分通常是pipeline阶段的一部分。

#include搜索路径可以被-nostdinc-isystem覆盖。

但是,我不知道如何覆盖链接器或完全覆盖库搜索路径。

现在发现有一些非常接近规格文件的东西:配置文件。

LLVM相关节选X文档(见上面的链接):

另一种指定配置文件的方法是将其编码为可执行文件的名字。例如,如果Clang可执行文件命名为armv7l-clang(它可能是指向clang的符号链接),然后Clang将在Clang所在目录中搜索armv7l.cfg文件

如果在调用中指定了驱动程序模式,Clang将尝试找到一个特定于指定模式的文件。例如,如果可执行文件文件命名为x86_64-clang-cl, Clang首先查找x86_64-cl.cfg如果没有找到,则查找x86_64.cfg

如果命令行包含有效更改目标的选项体系结构(这些是-m32-EL和其他一些)和配置文件以体系结构名称开始,Clang尝试加载有效体系结构的配置文件。为例子中,调用:

x86_64-clang -m32 abc.c

导致Clang首先搜索文件i368.cfg,如果没有这样的文件, Clang查找文件x86_64.cfg

配置文件由指定的命令行选项组成一行或多行。仅由空白字符组成的行忽略第一个非空字符所在的行#。长选项可以通过尾随符分割成几行反斜杠。下面是一个配置文件的示例:

# Several options on line
-c --target=x86_64-unknown-linux-gnu
# Long option split between lines
-I/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../ include/c++/5.4.0
# other config files may be included @linux.options

@file指令在配置文件中包含的文件是相对于包含文件已解析。例如,如果a配置文件~/.llvm/target.cfg包含该指令在@os/linux.opts中搜索文件linux.opts目录~/.llvm/os .