6
  • Xcode 中编译源代码的目的是什么?
  • 您项目中的每个文件都需要在那里吗?
  • 如果我将文件添加到项目中,是否每个文件都添加到编译源中。

在此处输入图像描述

4

2 回答 2

17

您询问

Xcode 中编译源代码的目的是什么?

目的是通知编译器在构建目标的过程中应该编译哪些源文件(例如 .m 文件)。

关于何时可以编辑“编译源”的几个实际示例:

  1. 除了 Idles 在项目中包含或排除多个目标的源的示例之外,另一个您可能从“编译源”中排除源的真实场景是当您使用第三方库(或一组类)时提供源代码,但您想控制将在您的项目中编译哪些源代码。

    例如,如果使用FMDB,您将源代码复制到您的项目中,但其中包含fmdb.m说明如何使用 FMDB 的示例文件,但您不想将其编译为应用程序的一部分。你可以(甚至可能想要)fmdb.m从你的项目中完全删除,但你也可以从你的编译源中删除一个文件,这样你就有一个很好的例子来说明如何在你的指尖使用这些类,但它不会编译为项目的一部分。

    另一个真实的例子是,如果您使用SDWebImage框架并将源代码包含在您的项目中。但是,您可能不需要该MKAnnotationView+WebCache类别,在这种情况下,如果不使用地图和类,您可能希望将其从“编译源”中删除MKAnnotationView。如果您将其保留在您的项目中,如果您没有将您的项目与 MapKit.framework 链接,您可能会收到链接器警告。如果您不使用 MapKit,只需MKAnnotationView+WebCache从编译源中删除它会更容易,并且需要链接 MapKit.framework(当您可能不需要它时)已得到解决。

  2. 另一次您将使用“编译源”是当您想为某些特定源文件设置编译器标志时。例如,如果您有一个 ARC 项目,但您有一些非 ARC 代码。您可以进入“编译源”,选择非 ARC .m 文件,并-fno-objc-arc按照Transitioning to ARC Release Notes中的说明设置标志。

  3. 如果您曾经将文件添加到项目中,但不小心忽略了选择“添加到目标”选项,则在构建目标时不会编译这些源文件。但是您可以进入“编译源”并将这些源文件添加到要编译的文件列表中,然后它们将包含在您的目标的未来版本中。

您询问:

您项目中的每个文件都需要在那里吗?

不,只是您要编译的每个源文件(例如 .m 文件)。不是标题。不是资产。只是你想要编译的源代码。

如果我将文件添加到项目中,是否每个文件都添加到编译源?

如果在添加文件时单击“添加到目标”复选框,.m 文件将被添加到“编译源”,资源将被添加到“复制捆绑资源”等。否则它们不会。

添加目标

于 2013-06-19T18:49:17.547 回答
5

假设您的项目中有多个目标,并且您只希望每个目标中的一些代码,那么您将根据需要将内容删除/添加到编译源中。它基本上是在构建目标时将传递给编译器的源代码文件列表。

例如,我可能会设置一个目标,将我的代码的子集 A 构建到静态库中,然后设置另一个目标来构建子集 B,链接到另一个目标构建的库,并将第一个目标指定为目标依赖项,以便如果我构建目标 B,Xcode 将首先构建目标 A。

于 2013-06-19T18:05:50.500 回答