xcode - Xcode 4 中的跨项目源代码引用

标签 xcode compilation linker workspace subproject

我知道您可以让 Xcode 引用其他项目中的框架/静态库构建目标,但是如果您要引用的项目没有框架/静态库目标,您可以直接引用其他 Xcode 项目的源代码吗?我尝试使用子项目和 Xcode 4 工作区来做到这一点,但无济于事。调整 header 搜索路径后,所有 #import 语句都可以正常工作,但我仍然遇到令人讨厌的编译器错误报告未找到符号。

setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -F/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -filelist /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Intermediates/.build/Debug/.build/Objects-normal/x86_64/.LinkFileList -mmacosx-version-min=10.7 -fobjc-arc -framework Cocoa -o /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug/.app/Contents/MacOS/

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_MagicalRecordHelpers", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_MRCoreDataAction", referenced from:
      objc-class-ref in ItemsArrayController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

另外,这个新的 Xcode 4 工作区是怎么回事?它与子项目究竟有何不同?我唯一能找到的是它们在视觉上看起来不同......

工作区

enter image description here

子项目

enter image description here

最佳答案

第一个问题的答案显然是“没有 Xcode 不能引用另一个项目中的源文件”。为了编译一个源文件(.m 文件)。 Xcode 项目必须持有对它们的直接引用。您可以转到 Target setting -> Build Phases -> Compiled resources 以查看将编译的内容。注意,除非直接将文件添加到项目中,否则它们不会显示在要编译的资源下。但是,标题可以跨不同的项目进行通信。

编辑

我认为第二个问题的答案是,Xcode 3 需要始终显式管理依赖项,而 Xcode 4 工作区允许隐式管理目标依赖项,只要它们都在同一个工作区中。指定依赖项所需要做的就是在摘要页面中添加要引用为链接库的其他项目的产品。这些发现花了太长时间......(一个完整的工作日),关于这方面的文档可以而且绝对应该改进!

关于xcode - Xcode 4 中的跨项目源代码引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8710187/

相关文章:

objective-c - 将值添加到顶点数组

ios - 为什么 Xcode 目标的功能 Pane 内的 App Sandbox 选项不可见?

ios - Xcode 中奇怪的编译器警告

c++ - C++编译设计:安全地扩展类

c++ - 是否可以进行编译,以便错误的 std::vector 访问调用将退出程序,并显示有用的错误消息?

c++ - 应用程序无法链接到 mysql 库 (CentOS)

rust - 如何手动向 lld 提供 core::panicking::panic*?

ios - 新的 iOS 团队成员 : no valid signing identity

java - java "platform agnosticism"是否有可能失败的情况?

c++ - 为什么这不会为链接器生成重复的符号?