3

Xcode では、すべてのターゲットのビルド設定がプロジェクトのビルド設定から継承されます。プロジェクトのビルド設定は「iOS デフォルト」から継承されます。この継承は以下に示され、 [結合]ではなく[レベル]が選択されています。

知らなかった人のために、プロジェクトの設定の下にある太字のエントリはオーバーライドを示しています。オーバーライドは、設定を強調表示してから COMMAND-BACKSPACE を押すことで「クリア」できます。

ここに画像の説明を入力

私が作成する重要なプロジェクトごとにこれらの値を絶えず変更することは、本当に古くなります。特に、その他の C フラグのようなアイテムは、追加する必要があり-Wall -Wextra -Wconversion -wstrict-overflowます。プリプロセッサ マクロは、Posix の を含めるために常に修正する必要がある別のものNDEBUG=1です。NDEBUG=1Posix では;が原因でNDEBUG削除する必要があるため、Release ビルドに がないことは間違いなくバグであると考えています。また、Apple の UI 標準では、. (Posixのみが標準化されているにもかかわらず、非常に多くの人が使用しているため、Debugビルドでも同様です)。abort()assert()abort()DEBUG=1NDEBUG

以下の@Peteshから、プロジェクトごとに構成を使用できることがわかります(おそらく、一度作成して再利用します)。しかし、それは、「IOS Default」テンプレートの欠陥のある設定をマスクするために、「適切な」または「正しい」設定を適用していることを意味します。私の意図は、問題を根本から解決することです。

デフォルト設定テンプレートを編集するにはどうすればよいですか? 「iOS デフォルト」を表すファイル システムに物理ファイルはありますか? もしそうなら、それは編集できますか (XML ですか)?

更新: @Peresh の回答に基づく (問題を完全に修正するためのディスク ファイルはありません): RADAR 12941954. Apple のバグ報告システムに未確認、未回答、未修正の状態で何年も放置される可能性があります。私と他の人は時間をかけて報告します。

4

1 に答える 1

3

ビルド構成ファイルは、前処理/コンパイルの一連のオプションを選択するための理想的な方法です.xcconfig。ベースとして必要な設定を含むファイルを使用してから、ターゲットに対してこの基本構成を選択します。

このファイルは、プロジェクトのベースに という名前で作成する必要がありますTargetType.xcconfig。基本コンパイラ フラグの要件については、次の内容のファイルを使用できます。

OTHER_CFLAGS = -Wall -Wextra -Wconversion -wstrict-overflow

ファイルに基づいてターゲットを.xcconfig作成すると、指定されたすべてのターゲットのデフォルト項目としてこれらのオプションが取得されます。

Debug と release のそれぞれに 1 つ追加して、NDEBUG=1DEBUG=1オプションの指定を許可できます。

GCC_PREPROCESSOR_DEFINITIONS = NDEBUG=1

この設定を構成に適用します。

Baseing a Build Configuration on a Configuration Fileの Xcode ヘルプを参照してください。プロセスを実行するオンラインのチュートリアルもあります。

gccのデフォルトのコンパイラ オプションを操作するために/ g++spec ファイルを使用しましたgccgccこれは、LLVM 用のドライバーを使用している場合でも機能します。デフォルトのコンパイラ オプションは、変更されていないスペック ファイルのものです。つまり、コンパイラに組み込まれており、ディスクには存在しません。プロセスは次のとおりです。

gcc -dumpspecs > specs
specdir=$(gcc -print-search-dirs | sed -n 's/install: //p')
sed 's/^\(.*mdynamic-no-pic:-fPIC\)/<default options here> \1/' specs > newspecs
sudo cp newspecs $specdir/specs

次のようにして、specfile が使用されていることを確認できます。

gcc -v <file>

次のように表示されます。

Reading specs from /Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/specs

それよりも

Using built-in specs.

これは、これらのフラグがすべての コンパイルに影響を与えるため、混乱を引き起こす可能性があります。macportsgccパッケージであっても、正しくコンパイルされない可能性があります。g++

clang/clang++には、残念ながらスペックファイルの概念がないため、コンパイル時にこのファイルを無視します。使用するすべてのオプションは、clang ビルド時に定義されます。この場合、デフォルトのコンパイラ オプションを決定するためにディスク上のファイルを読み取ろうとしないため、デフォルトのコンパイラ オプションを操作する方法はありません。

于 2013-01-01T12:28:30.780 に答える