Xcode 3.1.1和静态库

时间:2008-09-17 21:42:38

标签: xcode macos

我是一位经验丰富的VS.NET用户,并试图在Xcode 3.1.1上运行 这就是我想要完成的事情:

我想要一个静态库(“Lib”)拥有自己的xcodeproj文件。我有一个可执行应用程序(“App”),它利用Lib来引用Lib的xcodeproj文件,这样对Lib的更改会导致App重新链接。理想情况下,我希望能够在App的Xcode工作区内编辑Lib的源文件,这样我就不必一直在任务进行更改。

我从在线帮助中发现,我可以简单地将静态lib xcodeproj拖到我的应用程序项目中,然后获取引用。我看到,一旦我的静态lib xcodeproj在我的应用程序的项目中,我可以简单地将其拖到App的目标,它理解App依赖于Lib。这似乎是正确的道路,但事情并没有像我希望的那样运作。

以下是我的问题:

  1. 似乎简单地让App依赖于Lib并不会导致App与Lib链接。看来我必须将LibLib.a从Lib文件夹中显式拖到App的“Link Binary With Libraries”构建阶段。在VS.NET中,只需将项目指定为解决方案依赖项即可将其添加到链接行。我只是想确保我没有遗漏任何东西。

  2. 当我在Xcode中打开App并将Lib.xcodeproj拖入其中时,我没有得到任何Lib的源文件。我只在“Lib.xcodeproj”文件夹下获得libLib.a。在VS.NET中,我可以在那里编辑Lib的源文件并重建它等等......但是在Xcode中使用这种方法,在重建App时,对Lib.cpp的更改不会导致Lib重建。理想情况下,当我将Lib.xcodeproj拖到App中时,我会得到所有Lib的源文件和目标。有没有办法做到这一点?

  3. 提前感谢您的回复!

4 个答案:

答案 0 :(得分:9)

你是正确的,让目标A依赖于目标B(无论是在同一个项目内还是在项目中),会导致目标A与目标B相关联。您需要明确指定它们;这是因为它们是单独的概念,并且您可能在希望彼此链接的目标之间存在依赖关系 - 例如,由目标C构建的命令行工具和用作目标A的构建过程的一部分。

另外,你是正确的,从项目A中引用项目B不会让你在项目A的窗口中看到项目B的源代码。那是因为Xcode没有与Visual Studio和Eclipse相同的“工作空间”模型;你上面提到存在“包含项目A的工作空间”,但Xcode实际上没有任何这样的东西,只是一个窗口代表项目A.

答案 1 :(得分:4)

打开App项目。右键单击App目标,然后选择“获取信息”。然后转到“常规选项卡”并找到“直接依赖关系”。单击(+)(加号)按钮以添加直接依赖项。 Lib.xcodeproj应该出现在您可能的列表中。从该列表中选择Lib目标。

这应该可以实现Lib项目在构建App目标时必须构建(或重建)。

(现在编辑我自己的帖子。我意识到我在问题中没有提到第2点。我实际上还在考虑第2号。我不确定这是否可能。)

答案 2 :(得分:0)

我也是Xcode的新用户。我所知道的大部分内容都来自James Bucanek的Xcode书(ISBN 047175479x)。这是一本为Xcode 2.2编写的旧书,但我发现今天几乎所有它仍然适用于我,我目前使用的是Xcode 3.1

如果您有兴趣,可以找到便宜的二手副本。

答案 3 :(得分:0)

我也是Xcode 3.1的新手,只是玩了你提到的问题,发现你的第二个问题没有问题。无论您使用哪种应用程序编辑依赖库源代码,您的主项目都将重建依赖目标。我查了一下:

  1. 通过记事本应用程序编辑了您的应用所依赖的库的源文件。
  2. 选择依赖库项目参考,鼠标右键单击,然后选择“打开Finder”,然后选择所需的源文件并进行编辑。
  3. 一切运作良好。