所述gcc驱动器可被配置为使用使用特定连接体,特别是选择和其他细节(例如重写系统报头).specs的文件.
GCC版本(4.9.0)的当前(在撰写本文时)手册中描述了Spec Files.
Clang/LLVM是否有类似的机制.显然,Clang也有驱动程序的概念,但我无法提供有关Clang是否存在Spec Files或类似机制以及如何使用它们的任何文档.
我对C和C++感兴趣,但可能指向其中任何一个的指针都会让我开始.
目标是覆盖系统头和库路径以及前面简要提到的链接器.
根据docs,Clang 驱动程序没有直接等效于 GCC 规范文件:
clang 驱动程序没有“规格”的直接通讯员。嵌入在规范中的大部分功能都在工具特定的参数转换例程中。控制编译管道的规范部分通常是管道阶段的一部分。
#include 搜索路径可以使用-nostdinc和覆盖-isystem。
但是,我不知道如何覆盖链接器或完全覆盖库搜索路径。
事实证明,现在有一些与规范文件非常接近的东西:配置文件。
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 会尝试加载有效体系结构的配置文件。例如,调用:Run Code Online (Sandbox Code Playgroud)x86_64-clang -m32 abc.c导致 Clang 首先搜索文件
i368.cfg,如果没有找到该文件,则 Clang 查找该文件x86_64.cfg。配置文件由一行或多行指定的命令行选项组成。仅由空白字符组成的行以及第一个非空白字符为 的行将被忽略
#。长选项可以通过尾部反斜杠分成几行。这是配置文件的示例:Run Code Online (Sandbox Code Playgroud)# 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是相对于包含文件进行解析的。例如,如果配置文件~/.llvm/target.cfg包含指令 ,则会在目录 中搜索@os/linux.opts该文件。linux.opts~/.llvm/os