2012-02-28 46 views
1

我创建一个引用外部头文件configuration.h一些的#define配置参数静态库需要引用项目配置文件

我编的静态库并安装它在其中包含另一个项目静态库一个configuration.h文件。但是,更改该文件中的参数不起作用。看来这个配置文件正在被编译到静态库中,从而使参数硬编码。

如何获取静态库来引用外部文件?

回答

1

包含#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

+0

我想将您的示例应用于我的情况,但我不确定我们是否在谈论相同的事情。让我举另一个例子来帮助我们相互理解。 流行的移动广告网络提供了iOS静态库和公共头文件。其中一个头文件有一些#define,开发人员使用它来设置“appkey”。此appkey用于向服务器标识静态库正在使用的特定应用程序。 这种情况在您提议的方法下如何工作? – Spanner 2012-02-28 10:44:22

+0

在这种情况下,定义的appkey可能稍后会在相同的头文件中用作某些内联激活函数的参数。你必须寻找使用#define的地方。 – 2012-02-28 11:58:18

+0

是的#define在静态库中使用。重点是,如果我在我的项目中更改了appkey值,那么静态库将使用该更新的值,即该值不会编译到静态库中,而是可以在我的项目中更改。 我需要实现这个功能。 – Spanner 2012-02-28 12:04:47

相关问题