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