【问题标题】:Is there an equivalent to .spec files for Clang/LLVM and where can I find a reference?是否有与 Clang/LLVM 的 .spec 文件等效的文件,我在哪里可以找到参考?
【发布时间】:2014-06-30 13:36:00
【问题描述】:

gcc 驱动程序可以通过 .specs 文件配置为使用特定链接器、特定选项和其他详细信息(例如覆盖系统标头)。

GCC (4.9.0) describes the Spec Files here 版本的当前(在撰写本文时)手册。

Clang/LLVM 是否有类似的机制。显然 Clang 也有 the notion of a driver,但我无法提供任何关于 Clang 是否存在 Spec Files 或类似机制以及如何使用它们的文档。

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

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

【问题讨论】:

    标签: c++ c gcc clang


    【解决方案1】:

    根据the 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】:

    事实证明,现在有一些非常接近规范文件的内容:configuration files。

    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
    

    导致 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 指令包含的文件是 相对于包含文件解析。例如,如果一个 配置文件~/.llvm/target.cfg 包含指令 @os/linux.opts,文件linux.opts在 目录~/.llvm/os。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 2019-12-21
      • 2020-10-06
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2013-11-24
      相关资源
      最近更新 更多