【问题标题】:Xcode - Use header imports with folder-based pathsXcode - 将标头导入与基于文件夹的路径一起使用
【发布时间】:2013-07-01 21:02:45
【问题描述】:

我正在使用一个静态库并将 Xcode 指向一个包含标题的文件夹。这些标题以分层文件夹结构组织:

headers:
 - a.h
 - b.h
 - subheaders:
    - c.h
 - moreheaders:
    - d.h

我还有一些使用这个库的预先编写的源代码,它根据它们的位置引用标题:#import "subheaders/c.h"

但是 Xcode 使文件夹层次结构变平,迫使我使用#import "c.h"。有很多代码,我不能很容易地重写它来停止使用文件夹导入。有什么方法可以让 Xcode 识别文件夹结构?

附:我在我的主要目标下使用 "Library Search Paths" "Header Search Paths" 构建设置包含这些标题。搜索是非递归的,所以我什至不知道它是如何找到嵌套标题的......

感谢您的帮助!

【问题讨论】:

  • 既然这些是标题而不是库,为什么要使用库搜索路径?尝试将文件路径放在标题搜索路径中
  • 好点。我试过了,结果一样。
  • HEADER_SEARCH_PATHS 是正确的设置。它有效,我向你保证 :) 确保为相关目标定义了设置,并且它的值没有被隐藏(例如,在项目级别定义,但在目标级别被新定义删除)。也许您指定了错误的路径?

标签: objective-c xcode


【解决方案1】:

Xcode 默认构建头映射并且头映射是平面的,除了模块/框架,映射为ModuleName/Header.h。有关 Xcode 如何构建这些映射、存在哪些设置以及编译器做什么的详细信息,如果在映射中找不到文件,please see this answer

设置适当的标头搜索路径(HEADER_SEARCH_PATHSUSER_HEADER_SEARCH_PATHS)将使路径包含成为可能,无论是否使用标头映射,但在这种情况下,扁平化导入仍然可以正常工作。如果您不希望扁平化导入起作用,则需要禁用标头映射或确保有问题的头文件未添加到映射中,如另一个答案所示。

【讨论】:

    【解决方案2】:

    不幸的是,这只是我没有注意的一个例子。我已将标题添加到搜索路径,但我之前也将它们作为源添加到项目中(看看我是否可以让它以这种方式工作)。当我删除源文件夹并保留标题搜索路径时,我可以通过完整路径引用文件。感谢您的帮助。

    【讨论】:

      【解决方案3】:

      经过数小时的尝试和失败后,我在 XCode 9.3 兼容项目中的 XCode 9.4.1 中找到了禁用使用的选项

      使用标题映射

      这会让 Xcode 识别项目结构。

      我认为将每个文件和文件夹的位置设置为项目相关

      我希望有人遇到同样的问题并且现在有解决方案

      【讨论】:

        猜你喜欢
        • 2020-07-01
        • 2011-03-26
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2019-12-20
        • 1970-01-01
        相关资源
        最近更新 更多