2012-02-28 88 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

相關問題