如何在Xcode中引用使用不同配置构建的依赖项目?

时间:2013-03-11 20:22:31

标签: xcode xcodebuild build-dependencies

我有两个Xcode项目:SuperSubSuper具有自定义配置:EnterpriseSub仅具有默认配置:DebugReleaseSuperSub有目标依赖关系。当我使用Super配置构建Enterprise时,Sub使用其默认配置构建:Release。这产生以下层次结构:

Build
|-Products
  |-Enterprise-iphoneos
    |-Super.app
  |-Release-iphoneos
    |-libSub.a
    |-Sub
      |-Sub.h

Clang无法构建,因为libSub.aSub/Sub.h通常与Super.app位于同一目录中,而是位于不同的目录中,因为Sub使用{Release构建1}}配置而不是Enterprise。我控制了两个项目,因此我可以轻松地将Enterprise配置添加到Sub,但我觉得必须有Xcode Build Settings的神奇咒语才能使其发挥作用。

2 个答案:

答案 0 :(得分:0)

我通过在我的父项目中使用Xcode配置文件解决了完全相同的问题 - 通常是您的应用程序。

这是我采取的步骤:

  1. 通过New>在Xcode中创建基本配置文件其他>配置文件。

  2. 写下你的基础xcconfig文件,我看起来有点像这样:

    /// Configure Search Paths
    HEADER_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)/include" "$(BUILT_PRODUCTS_DIR)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../Externals/Libraries/GoogleAnalytics"
    
    /// Linker flags
    OTHER_LDFLAGS=-ObjC -all_load
    
  3. 这里需要注意的是$(BUILT_PRODUCTS_DIR)是以下的连接:

    $(BUILD_DIR)/$(CONFIGURATION)-$(PLATFORM_NAME)
    
  4. 为自定义配置编写专用配置。我创建了一个Ad Hoc配置,它复制了Release,因此我的搜索路径现在看起来像这样:

    #include "BaseConfig.xcconfig"
    
    /// Ad Hoc search paths
    HEADER_SEARCH_PATHS = "$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include" "$(BUILD_DIR)/Release-$(PLATFORM_NAME)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/Release-$(PLATFORM_NAME)" "$(SRCROOT)/../Externals/Sources/GoogleAnalytics"
    
  5. 然后在应用程序的项目的“信息”选项卡中选择您的配置,使用“基本配置进行调试和发布”,然后使用特殊的配置进行自定义配置。

答案 1 :(得分:0)

我在我的一个应用中遇到了类似的问题。在 Xcode 12.4 中,我能够通过将我的额外配置(我称之为 Ad Hoc for Test)的系统框架搜索路径设置为 $(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME) 来解决它。

通过选择您的目标,然后选择构建设置选项卡,可以在您的项目中找到此设置。我建议搜索“系统框架”来找到它。添加路径后,Xcode 会将其转换为系统上的实际路径,如我的屏幕截图所示。这也适用于存档。

Build Settings Example