2011-09-26 14 views
12

私の現在のXcode iOSプロジェクトではいくつかの静的ライブラリが使用されています。静的ライブラリのさまざまなコードモジュールには、さまざまなレベルのデバッグがあり、そのモジュール内で#defineを使用してオン/オフを切り替えることができます。サブプロジェクトのXcode環境変数

私がしたいことは、すべてのデバッグのデフォルトをオフにしてから、親プロジェクトからデバッグレベルを設定することです。私はこれをやりたいので、libを使うプロジエクトは明示的にデバッグをオンにしなければなりません。

したがって、MainProjはmyLib1とmyLib2などを使用します。myLib1内にはfooModuleというモジュールがあります。私はライブラリがビルド時に、それをピックアップし、適切にコンパイルするので、親プロジェクトでFOOMODULE_DEBUG_LEVELを定義できるようにしたい

#if FOOMODULE_DEBUG_LEVEL > 0 
//debug code, console logs etc 
#endif 

:fooModuleは、次のようなデバッグコードを持っています。

私が試した:私は、サブプロジェクトによってピックアップされたどちらも1の値を持つユーザ定義の環境変数としてFOOMODULE_DEBUG_LEVELを追加しようとしている.PCH メインプロジェクトで

#define FOOMODULE_DEBUG_LEVEL 1 

lib。

これを行う方法はありますか、これを間違った方法で近づけていますか?

答えて

-1

ターゲットに「プリプロセッサマクロ」ビルド設定を使用して定義を追加したり、デバッグを有効にするデバッグ/リリースビルド設定を追加することもできます。

あなたの場合は、値の列をダブルクリックし、「+」をクリックして新しいマクロを追加します。マルコは "FOOMODULE_DEBUG_LEVEL = 1"となり、コンパイラには-DFOOMODULE_DEBUG_LEVEL=1が返されます。

+0

こんにちはMattiasさん、プリプロセッサマクロを追加しても、メインプロジェクトに含まれているサブプロジェクト(静的なライブラリ)のビルドには影響していないようです。 – tomj

+0

これは静的ライブラリでは表示されません。理由が何であるか教えていただけますか? – applefreak

+0

あなたは静的ライブラリを構築していますか、またはすでにビルドされた静的ライブラリとリンクしていますか? -Dマクロはコンパイル時にのみ使用されます。 –

0

xcconfigファイルを作成してから、複数の定義なしでこれを達成してから、プロジェクト全体で#includeを参照してください。 matiasの提案を適用し、xcconfigでプリプロセッサ定義を定義することができます。変更するファイルが1つあります(pchファイルでこれらのdefが必要な場合は完全に再構築されますが、別の設定があります)。

xcodeでは、ビルド構成ごとに別々のxcconfigを割り当てることもできます。

+0

提案をありがとう、 – tomj

+0

私は自分のプロジェクトにAppDebug.xcconfigを追加しました。プロジェクト情報ページに、私のデバッグとリリースのビルドをAppDebug.xcconfigに '基づいて'設定しました。次に、AppDebug.xcconfigにDEBUG_VARIABLE = 1が追加されました。#if defined(DEBUG_VARIABLE)NSLog(@ "これはテストです"); #endifは何も印刷できません。私は、xcconfigファイルの動作について何か不足しているはずです。 – tomj

+0

プリプロセッサの定義として追加する: 'GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $(継承)' – justin

-1

ソリューション

1)ターゲット]> [設定]> [プリプロセッサマクロを作成します。ターゲットのプリプロセッサ定義として環境変数を設定します(プロジェクトではなくターゲットである必要があります)。 DEBUG_VARIABLE = 1

2)プロジェクト>ビルドフェーズ>ビルドフェーズを追加します。次に、実行スクリプトで変数をエクスポートします。 エクスポートDEBUG_VARIABLE

すべてのサブプロジェクトがこの環境変数を取得するようになりました。

私は理想的には、編集しやすいように1つの場所に定義されているすべてのプリプロセッサマクロで.xcconfigファイルを使用するというJustinの提案を使用することが理想的だと思います。私の人生にとって私はこの仕事をすることはできません。これを.xcconfigファイルに入れた場合: GCC_PREPROCESSOR_DEFINITIONS = DEBUG_VARIABLE = 1 $(継承) DEBUG_VARIABLE環境変数が決して設定されない場合、この構成でデバッグおよび/またはリリースビルドをベースにします。

+0

アップデート:新しいプロジェクトを作成した場合、上で説明したように.xcconfigファイルを追加すると環境変数が設定され、#ifdefsはこの変数。私が取り組んでいるプロジェクトと全く同じ手順に従えば、それは機能しません。私のメインプロジェクトのプロジェクト設定に特有の何かが存在するに違いないと思います。 – tomj

+0

プロジェクトの設定を上書きする設定がターゲットにあると思います。私はビルドですべてのプリプロセッサマクロを削除し、今すぐ.xcconfigファイルが動作するようです。私がきれいにしない限り、変更は常にビルドで取り上げられるわけではありません。これを忘れないでください! – tomj

+1

このアドバイスを使用しようとしましたが、プロジェクトレベルでのビルドフェーズはありません。ターゲットレベル(ビルド段階がある)に実行スクリプトを追加することは、サブプロジェクトのビルド前に実行されていないため、役立たないでしょう。 – DrMickeyLauer

0

私はスキーマを編集し、ビルド前のシェルスクリプトを追加して適切な変数を設定します。 スクリプトを追加すると、どのターゲットから定義を取得するかを設定できます。