gpt4 book ai didi

objective-c - Xcode:在另一个项目使用的一个项目中定义预处理器宏

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:10 25 4
gpt4 key购买 nike

我有多个应用程序项目,它们都链接到同一个静态库项目。每个应用项目需要使用不同的设置来编译静态库项目。

目前我在静态库项目中有一个条件编译 header ,我们称它为 ViewType.h,它添加了更多特定于每个 View 的类型、typedef、宏等。

#define VIEW_A 1
#define VIEW_B 2
#define VIEW_C 3

#ifndef VIEWTYPE
#define VIEWTYPE VIEW_A
#endif

#if VIEWTYPE == VIEW_A
// further typedefs and defines tailored to VIEW_A
#elif VIEWTYPE == VIEW_B
// further typedefs and defines tailored to VIEW_B
#elif VIEWTYPE == VIEW_C
// further typedefs and defines tailored to VIEW_C
#endif

这里的问题是每个app项目都需要修改静态库项目中的VIEWTYPE,每次切换app项目都得重新修改VIEWTYPE。

不幸的是,我似乎无法在应用程序目标中将 VIEWTYPE=2(例如)定义为预处理器宏。而且我也无法在静态库项目中定义它,因为所有 3 个项目都包含相同的静态库项目,因为 .xcodeproj 在 3 个应用程序之间共享(即 .xcodeproj 被拖放到应用程序项目上;我'我没有使用工作空间)。

我知道一个问题是静态库是一个依赖目标,它是在考虑应用程序目标之前首先构建的。因此,也许有一些方法可以根据其他条件(即检查文件,或包括可选的特定于应用程序的 header )来决定库是为哪个应用程序构建的。

问题我如何创建宏或根据应用目标定义的宏/设置执行条件编译,然后由静态库项目遵守?

最佳答案

第一种也是最简单的方法是摆脱静态库,直接将源文件包含到依赖项目中。我经常发现中间静态库带来的麻烦远远超过它们的值(value)。当它们提供显着的构建性能改进时,它们的一大好处就来了,但它们不能在这里,因为无论如何你都要为每个最终目标重建静态库。

我会说,#defines 类型的使用几乎总是让我哭泣,并且可能暗示可以更好地处理的设计缺陷。例如,您可能想要实现返回所需类的方法(UIView layerClass 的方式)。更改类型定义的预处理器技巧可能会导致极其微妙的错误。 (我去年刚刚追查到一个这样的案例……这是一个可怕的、可怕的崩溃。)

也就是说,可以使用 xcconfig 文件解决此问题的某些版本的另一种方法。例如,如果静态库实际上有多个副本(即这是一个通常被复制到其他项目中的库),那么您可以使用具有 #include "../SpecialTypeDefs.xcconfig 的 xcconfig 文件“。该文件将由每个项目提供以设置特殊声明。未能定义该文件将导致编译器错误,因此很容易避免错误。

但就个人而言,我会直接将文件包含到实际项目中并跳过库,除非它们真的很大。

关于objective-c - Xcode:在另一个项目使用的一个项目中定义预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com