是否有与Clang/LLVM相同的.spec文件,在哪里可以找到引用?

0xC*_*22L 8 c c++ gcc clang

所述gcc驱动器可被配置为使用使用特定连接体,特别是选择和其他细节(例如重写系统报头).specs的文件.

GCC版本(4.9.0)的当前(在撰写本文时)手册中描述了Spec Files.

Clang/LLVM是否有类似的机制.显然,Clang也有驱动程序的概念,但我无法提供有关Clang是否存在Spec Files或类似机制以及如何使用它们的任何文档.

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

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

Mar*_*orn 5

根据docs,Clang 驱动程序没有直接等效于 GCC 规范文件:

clang 驱动程序没有“规格”的直接通讯员。嵌入在规范中的大部分功能都在工具特定的参数转换例程中。控制编译管道的规范部分通常是管道阶段的一部分。

#include 搜索路径可以使用-nostdinc和覆盖-isystem

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

  • 要覆盖链接器搜索路径,请检查“ld”的手册页以识别您需要的标志(例如“-syslibroot”)并告诉clang通过“-Wl”将它们传递给链接器。例如,此命令使我能够使用自定义版本的 `libstdc++`:`clang++ -std=c++11 -stdlib=libstdc++ -nostdinc++ -isystem/path/to/alt-stdlib/include/c++ -isystem/path /to/alt-stdlib/include/c++/x86_64-apple-darwin14.4.0 -L/path/to/alt-stdlib/lib -lstdc++ -Wl,-syslibroot,/usr/lib -Wl,-syslibroot,/path /to/alt-stdlib/lib test.cpp` (2认同)

0xC*_*22L 4

事实证明,现在有一些与规范文件非常接近的东西:配置文件

LLVM 12.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
Run Code Online (Sandbox Code Playgroud)

导致 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
Run Code Online (Sandbox Code Playgroud)

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