【问题标题】:How can I force Xcode to use a custom compiler?如何强制 Xcode 使用自定义编译器?
【发布时间】:2016-09-05 09:50:30
【问题描述】:

我想强制 Xcode 使用自定义编译器(来自 src 的“clang-llvm”构建),以便我可以使用 clang 插件。我的 Xcode 版本是 7.3.1。

【问题讨论】:

    标签: xcode clang llvm


    【解决方案1】:

    人们说自定义工具链是可能的。我没有对它们进行研究,因为更简单的解决方案对我很有效:

    也可以通过设置适当的 Xcode“构建设置”来直接运行前端插件。 (有几种方法可以做到这一点,您可以在命令行上设置它们,例如:xcodebuild build FOO=bla。)以下是一些我发现对注入 C 标志有用的构建设置:

    OTHER_CFLAGS、OTHER_CPLUSPLUSFLAGS 或替换编译器和链接器:

    CC、CPLUSPLUS、LD、LDPLUSPLUS、LIBTOOL

    同样的方法可以控制“分析”动作:CLANG_ANALYZER_EXEC、CLANG_ANALYZER_OTHER_FLAGS

    免责声明:其中一些构建设置没有记录(afaik)。使用风险自负。

    (取自[cfe-dev] Compile/refactor iOS Xcode projects

    对我来说,在 Xcode 项目的构建设置中定义以下用户定义的设置就足够了:

    CC=my-c-compiler
    
    CXX=my-cxx-compiler
    
    LIBTOOL=my-linker-for-static-libraries
    

    如果你使用 CMake,自动注入编译器的方法是使用

    set_target_properties(your-target PROPERTIES XCODE_ATTRIBUTE_CC "${YOUR_CC}")
    set_target_properties(your-target PROPERTIES XCODE_ATTRIBUTE_CXX "${YOUR_CXX}")
    

    【讨论】:

      【解决方案2】:

      几年前我写了一篇文章,正好解决了你描述的问题:Creating and using Clang plugin with Xcode

      要启用自定义 clang,您需要实际修补 Xcode.app 本身的内部,这在技术上是可行的,但是:

      1. 更新 Xcode 时会中断
      2. 它将在您的机器上正常工作
      3. 插件的版本和你的编译器应该匹配,即 它们应该使用同一棵树编译

      所以一般来说它并没有真正扩展,所以要小心:)

      【讨论】:

        【解决方案3】:

        Xcode 有一个有点模糊的特性,它支持"alternative toolchains"。例如,Swift.org 为从当前资源构建的 Swift 提供了可安装的工具链。

        不幸的是,虽然 Apple 的文档描述了如何安装和使用此类替代工具链,但并未描述如何创建它们。 Swift 源代码库中有构建工具链的脚本,您可以查看它们以了解它是如何完成的。他们在https://github.com/apple/swift/tree/master/utils。从build-toolchain 开始,它调用build-script 并从那里开始。

        【讨论】:

        【解决方案4】:

        方法一:更改用户自定义设置

        在项目或目标构建设置下添加用户定义设置

        CC=/path/to/cc
        CXX=/path/to/c++
        

        如果您想要调用单个编译器或链接器,或者如果您想要调用一个蹦床来决定动态调用什么,这将非常有用。

        方法二:通过插件创建完整的自定义工具链

        使用 Clang LLVM 1.0.xcplugin 作为模板(在 Xcode.app 插件文件夹中找到),您可以修改 plist 以指向您自己的替代编译器和链接器。

        这个OLLVM on iOS tutorial 走过它。

        【讨论】:

          【解决方案5】:

          project setting 转到build setting 并选择目标。然后从顶部栏中选择Basic 旁边的All。然后在构建选项下你可以看到编译器选项。

          参考下面的截图,

          更新:

          我认为你应该参考Using C and C++ in an iOS App with Objective-C++this tutorial

          【讨论】:

          • 当我将编译器添加到这个选项时,它告诉我它是一个不受支持的编译器。
          • 使用最新的 xcode,您只能使用 llvm。以及为什么要设置另一个?
          • 我想用clang插件获取一些函数调用信息,好像默认编译器不支持插件。
          猜你喜欢
          • 2014-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-28
          • 2012-11-25
          • 1970-01-01
          • 1970-01-01
          • 2017-01-17
          相关资源
          最近更新 更多