|
|
Log In | Not a Member? |
Contact ADC |
| < Previous PageNext Page > |
Xcodeでは、あるプロジェクトに対してSDKを選択すると、SDKROOTが選択されたSDKのパスに設定され、そのパスが、フレームワーク、ヘッダ、ライブラリの検索パスに暗黙的に追加されます。makefileベースのプロジェクトでは、コンパイラとリンカに渡すオプションによって、この処理が実行されます。
新しい検索パス内のファイルの1つに、$(SDKROOT)/usr/include/AvailabilityMacros.hがあります。これは、弱いリンクのサポートを機能させる主要ヘッダです。このヘッダファイルでは、プリプロセッサマクロMAC_OS_X_VERSION_MAX_ALLOWEDが、そのSDKによって表されるバージョンに相当する定数に設定されています(たとえば、Mac OS X v10.2.8であれば、1028)。
Mac OS XのデプロイメントOSを選択したら、“「クロス開発のためのプロジェクトの設定」”で解説しているように、選択したメジャーシステムバージョン(10.1、10.2、10.3、10.4)に相当する定数値をMACOSX_DEPLOYMENT_TARGETビルド設定に割り当てます。 コンパイラは、このビルド設定を使って弱いリンクを可能にします。コンパイラはまた、この値を使って、プリプロセッサシンボルMAC_OS_X_VERSION_MIN_REQUIREDも設定します。このシンボルは、弱いリンクとする関数を指定するために、ヘッダAvailabilityMacros.hによって使用されます。
Important: Xcodeにおいて、プロジェクトに対するSDKを選択すると(“「クロス開発のためのプロジェクトの設定」”を参照)、選択したSDKは、プロジェクト内のすべてのターゲットに適用されます(すべてのターゲットが、指定したSDKのヘッダとライブラリを使ってビルドされます)。ターゲットごとにSDKを指定することもできますが、そのようにすると、プロジェクト全体に作用するようなSDK設定を使用している他のXcodeの機能の処理が妨げられる可能性があります。これについては、“「SDK設定がXcodeの他の機能にどのように影響するか」”で解説しています。デプロイメントOSは、“「クロス開発のためのプロジェクトの設定」”で解説しているように、ターゲットごとに、またはプロジェクト内のすべてのターゲットを対象に選択できます。ターゲットは、指定したOSのバージョンのシステムまでさかのぼってのデプロイメントが可能です。ビルド設定とそれらの優先順位については、『Xcode 2.2 User Guide』を参照してください。
プリプロセッサシンボルMAC_OS_X_VERSION_MIN_REQUIREDおよびMAC_OS_X_VERSION_MAX_ALLOWEDは、AvailabilityMacros.hヘッダファイルによって、GCCコンパイラディレクティブである__attribute__((weak_import))および__attribute__((deprecated))を使用して他のいくつかのプリプロセッサシンボルを定義する目的で使用されます。これらのシンボルは、Carbonヘッダファイルにおいて(さらに、すべてではありませんが多くのCocoaのヘッダにおいても)、各バージョンのオペレーティングシステムでどの関数やメソッドの呼び出しが利用できるかを定義するために、広範囲に使用されています。
これらのアクションの組み合わせにより、以下のようなことが起こります。
選択したSDKで定義されていないシンボルがコード内で使用されていると、コンパイラ時にエラーが生じます。
定義はされているけれども廃止としてマークされたシンボルがコード内で使用されていると、コンパイラ時に警告が出ます。
選択したSDK、および選択したデプロイメントOSで定義されているシンボルがコード内で使用されていると、コードは正常にビルドおよびリンクされます。実行時には、
デプロイメント対象バージョンよりも古いシステム上では、そのバージョンで使用できないシンボルを使用していると、コードは失敗する可能性があります。
デプロイメント対象バージョン以降のシステムでは、そのバージョンでサポートされていないシンボルについては弱い参照(つまり、NULLの関数ポインタ)が生じる可能性があります。これに対処するかどうかは、皆さんのコード次第です。対処の例については、“「未定義の関数呼び出しの確認」”を参照してください。
注: Mac OS Xバージョン10.2以降のCarbonおよびCocoaフレームワークのヘッダでは、自動的にAvailabilityMacros.hがインクルードされますが、バージョン10.1(AvailabilityMacros.hの導入前)ではインクルードされません。
1つのソースコードのセットを複数の異なるSDKで簡単に利用できるように、Mac OS X v10.1.5のSDKには、AvailabilityMacros.hのコピーが含まれています。10.1.5 SDKを使用するコードと利用可否判定マクロは、次のようなステートメント(プレフィックスヘッダファイルに追加できます)を使用して、そのヘッダを明示的にインクルードすることで正常にコンパイルできます。
#include <AvailabilityMacros.h>
例については、“「個々のSDKのための条件付きコンパイル」”を参照してください。
| < Previous PageNext Page > |
Last updated: 2005-11-09
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |