【问题标题】:Understanding Xcode's Copy Headers phase了解 Xcode 的 Copy Headers 阶段
【发布时间】:2012-05-22 00:46:21
【问题描述】:

在 Xcode 的“Copy Headers”阶段,“Project”部分和“Private”部分下的 headers 有什么区别?您想什么时候使用它们?

另外,我可以理解您为什么要复制公共标头(例如对于静态库) - 但您为什么要复制私有标头?

编辑: @mipadi 下面解释了公共和私有部分的作用。但是,我仍然缺少在“项目”部分中包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。

【问题讨论】:

    标签: xcode build header


    【解决方案1】:

    如果公共标头包含私有标头,则必须复制私有标头,但要确保库或框架的使用者知道这些私有标头不是公共 API 的一部分。

    “项目”标头是私有标头,不包含在公共标头中(它们通常是内部实现的一部分,因此仅包含在实现中 - .c 或 @987654322 @ -- 文件)。

    构建框架时,公共头文件被复制到框架的Headers目录中,而私有头文件被复制到PrivateHeaders目录中。

    【讨论】:

    • 非常感谢!我不明白在“复制标题”阶段的“项目”部分中包含标题的效果是什么,而不是根本不包含标题。
    • @Danra:当标头可见性设置为“项目”时,将在编译库或框架时使用,但不包含在最终产品中(即,它仅用于内部实现)。
    • 如果标题根本不在阶段中,它也将可用。导入它仍然有效。据我了解,“复制标题”阶段是一种在链接阶段之后发生的构建后事件。顺便说一句,在向项目添加扩展/协议时,通常默认情况下 Xcode 不会将适当的 .h 文件添加到任何目标,并且它不会出现在“复制标头”阶段。
    • 另外,如果这是针对 Test 目标,如果只有一个关联目标,则将它们放在 Project 部分(在 Test 目标内)就足够了。
    【解决方案2】:

    @Danra,如果您将标头放在“项目”下,这些标头将对您的实现可见,无论标头的实际位置如何。

    假设您的文件夹结构如下: /Sources/libAF/AFSomething.h /Sources/libAF/AFSomething.m /Sources/exec/main.m

    如果您将“AFSomething.h”放在“项目”下,则可以在 main.m 中使用它,如下所示: #import "AFSomething.h"

    通俗地说,Xcode 将包含项目标头,尽管您省略了实际路径信息。

    【讨论】:

      【解决方案3】:

      来自Setting the Visibility of a Header File:

      • Public:界面已完成,供您产品的客户使用。公共标头包含在产品中,作为无限制的可读源代码。

      • Private:该界面不适用于您的客户,或者处于开发的早期阶段。产品中包含一个私有标头,但它被标记为“私有”。因此,这些符号对所有客户端都是可见的,但客户端应该明白他们不应该使用它们。

      • 项目:该接口仅供当前项目中的实现文件使用。项目标头不包括在目标中,除了在目标代码中。客户根本看不到这些符号,只有您才能看到。

      【讨论】:

      • 我仍然缺少在“项目”部分包含标题与在“复制标题”阶段的任何部分中没有标题之间的区别。
      【解决方案4】:

      除此之外,通常人们有一个脚本来“清理”私有标题,这样公众就无法看到这些符号是什么。出于调试/开发目的,保留私有标头,它们在开发和调试阶段会派上用场。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2021-10-14
        • 2018-08-19
        • 2015-10-07
        • 1970-01-01
        相关资源
        最近更新 更多