2012-02-28 4 views
1

を参照する必要がありますconfiguration.hファイルただし、そのファイルのパラメータを変更しても効果はありません。これは、configuration.hが静的ライブラリにコンパイルされているため、パラメータがハードコードされているようです。静的ライブラリは、私は静的ライブラリをコンパイルし、含まれている別のプロジェクトにそれをインストールしている私は</p> <p>configuration.h外部ヘッダファイルにいくつかの#define設定パラメータを参照する静的ライブラリを作成していたプロジェクトの設定ファイル

外部ファイルを参照するための静的ライブラリを取得するにはどうすればよいですか?

答えて

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の静的ライブラリと公開ヘッダーファイルが提供されています。これらのヘッダーファイルの1つには#defineがいくつかありますが、これは開発者が 'appkey'を設定するために使用します。このappkeyは、スタティックライブラリが使用されている特定のアプリケーションをサーバーに識別するために使用されます。 提案する方法では、この状況はどのように機能しますか? – Spanner

+0

この場合、定義されたappkeyは後で同じヘッダーファイルで使用され、一部のインラインアクティベーション関数などで引数として使用されます。 #defineが使われている場所を探す必要があります。 –

+0

はい静的ライブラリの内部で#defineが使用されています。ポイントは私のプロジェクトでappkeyの値を変更すると、静的ライブラリはその更新された値を使用します。つまり、値は静的ライブラリにコンパイルされませんが、私のプロジェクトでは変更可能です。 この機能を実現する必要があります。 – Spanner

関連する問題