1
我创建一个引用外部头文件configuration.h一些的#define配置参数静态库需要引用项目配置文件
我编的静态库并安装它在其中包含另一个项目静态库一个configuration.h文件。但是,更改该文件中的参数不起作用。看来这个配置文件正在被编译到静态库中,从而使参数硬编码。
如何获取静态库来引用外部文件?
我创建一个引用外部头文件configuration.h一些的#define配置参数静态库需要引用项目配置文件
我编的静态库并安装它在其中包含另一个项目静态库一个configuration.h文件。但是,更改该文件中的参数不起作用。看来这个配置文件正在被编译到静态库中,从而使参数硬编码。
如何获取静态库来引用外部文件?
包含#define
预处理器指令的头文件只能影响编译的代码。由于静态库已经被编译,所以它不受预处理指令的影响。
您应该使用运行时结构,例如if
来更改静态库的行为方式。
如果你的代码是:
// configuration.h
#define USE_FLUX_CONDENSER 1
// static library
void advanceTime() {
#if USE_FLUX_CONDENSER
chargeFluxCondenser()
#endif
}
它将成为:
// configuration.h
extern BOOL g_useFluxCondenser;
// static library
BOOL g_useFluxCondenser;
void advanceTime() {
if (g_useFluxCondenser) {
chargeFluxCondenser()
}
}
而且地方在初始化代码中设置g_useFluxCondenser = YES
。
我想将您的示例应用于我的情况,但我不确定我们是否在谈论相同的事情。让我举另一个例子来帮助我们相互理解。 流行的移动广告网络提供了iOS静态库和公共头文件。其中一个头文件有一些#define,开发人员使用它来设置“appkey”。此appkey用于向服务器标识静态库正在使用的特定应用程序。 这种情况在您提议的方法下如何工作? – Spanner 2012-02-28 10:44:22
在这种情况下,定义的appkey可能稍后会在相同的头文件中用作某些内联激活函数的参数。你必须寻找使用#define的地方。 – 2012-02-28 11:58:18
是的#define在静态库中使用。重点是,如果我在我的项目中更改了appkey值,那么静态库将使用该更新的值,即该值不会编译到静态库中,而是可以在我的项目中更改。 我需要实现这个功能。 – Spanner 2012-02-28 12:04:47