Objective-C ルール

問題を報告 ソースを見る {2/7.3.7}

ルール

j2objc_library

ルールのソースを表示
j2objc_library(name, deps, compatible_with, deprecation, distribs, entry_classes, exec_compatible_with, exec_properties, features, jre_deps, restricted_to, tags, target_compatible_with, testonly, toolchains, visibility)

このルールは、J2ObjC を使用して Java ソースファイルを Objective-C に変換します。Objective-C は、objc_library ルールと objc_binary ルールの依存関係として使用できます。J2ObjC 自体の詳細については、J2ObjC のサイトをご覧ください。

カスタム J2ObjC トランスパイル フラグは、コマンドラインでビルドフラグ --j2objc_translation_flags を使用して指定できます。

j2objc_library ターゲットに含まれる変換済みファイルは、デフォルトのコンパイル構成を使用してコンパイルされます。これは、属性にコンパイル オプションを指定しない objc_library ルールのソースと同じ構成です。

さらに、生成されたコードはソースレベルではなくターゲット レベルで重複排除されます。同じ Java ソースファイルを含む 2 つの異なる Java ターゲットがある場合、リンク時に重複シンボルエラーが表示されることがあります。この問題を解決する正しい方法は、共有 Java ソースファイルを、依存できる別の共通ターゲットに移動することです。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です。

Objective-C にトランスパイルされる Java ファイルを含む j2objc_libraryjava_libraryjava_importjava_proto_library ターゲットのリスト。

exportsdepsruntime_deps によって推移的に到達できる java_library ターゲットと java_import ターゲットはすべて、Java アノテーション処理によって生成されたファイルを含め、変換とコンパイルが行われます。srcjar が指定されていない code>java_import ターゲットはサポートされていません。

J2ObjC 変換の動作は、推移的クロージャに含まれるソース Java ソースファイルのタイプによって異なります。java_librarysrcs に含まれる .java ソースファイルごとに、対応する .h および .m ソースファイルが生成されます。java_librarysrcs または java_importsrcjar に含まれるソース jar ごとに、対応する .h と .m のソースファイルがその jar のすべてのコードとともに生成されます。

ユーザーは、J2ObjC で生成されたヘッダー ファイルをコードにインポートできます。これらのファイルのインポートパスは、元の Java アーティファクトのルート相対パスです。たとえば、//some/package/foo.java のインポート パスは some/package/foo.h で、//some/package/bar.srcjar のインポート パスは some/package/bar.h です。

proto_library ルールがこのルールの推移的クロージャに含まれている場合、J2ObjC proto もバイナリレベルで生成、コンパイル、リンクされます。proto //some/proto/foo.proto の場合、ユーザーはインポート パス some/proto/foo.j2objc.pb.h を使用して、生成されたコードを参照できます。

entry_classes

文字列のリスト。デフォルトは [] です。

変換された ObjC がユーザーの ObjC コードから直接参照される Java クラスのリスト。フラグ --j2objc_dead_code_removal がオンの場合、この属性は必須です。Java クラスは、Java 言語仕様で定義されている正規名で指定する必要があります。フラグ --j2objc_dead_code_removal を指定すると、エントリクラスのリストが推移的に収集され、デッドコード分析を行うためのエントリ ポイントとして使用されます。未使用のクラスは、最終的な ObjC App Bundle から削除されます。
jre_deps

ラベルのリスト。デフォルトは [] です。

この j2objc_library ルールで変換されるすべての Java コードに必要な追加の JRE エミュレーション ライブラリのリスト。デフォルトでは、JRE のコア機能のみがリンクされています。

objc_import

ルールのソースを表示
objc_import(name, deps, hdrs, alwayslink, archives, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, features, includes, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

このルールは、コンパイル済みの静的ライブラリを .a ファイルの形式でカプセル化します。また、objc_library でサポートされているものと同じ属性を使用して、ヘッダーとリソースをエクスポートすることもできます。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です。

このターゲットが依存するターゲットのリスト。
hdrs

ラベルのリスト。デフォルトは [] です。

依存ルールのソースによってインクルードされることになるため、このライブラリによってパブリッシュされる、C、C++、Objective-C、Objective-C++ のヘッダー ファイルのリスト。

これらのヘッダーは、ライブラリの公開インターフェースを記述するもので、このルールまたは依存ルールのソースがインクルードできるようになります。このライブラリのクライアントによってインクルードされることを意図していないヘッダーは、srcs 属性でリストする必要があります。

モジュールが有効になっている場合、これらはソースとは別にコンパイルされます。

ブール値。デフォルトは False です。

1 の場合、このライブラリに(直接的または間接的に)依存するバンドルまたはバイナリは、srcsnon_arc_srcs にリストされているファイルのすべてのオブジェクト ファイルにリンクします。これには、バイナリによって参照されるシンボルが含まれていないファイルも含まれます。 これは、バイナリ内のコードによってコードが明示的に呼び出されていない場合(たとえば、なんらかのサービスから提供されるコールバックを受け取るようにコードが登録されている場合)に役立ちます。
archives

ラベルのリスト。必須

このターゲットに依存する Objective-C ターゲットに提供される .a ファイルのリスト。
includes

文字列のリスト。デフォルトは [] です。

このターゲットと依存するすべてのターゲットに追加する #include/#import 検索パスのリスト。これは、#import/#include ステートメントでワークスペース パス全体を指定していないサードパーティ ライブラリとオープンソース ライブラリをサポートするためです。

パスはパッケージ ディレクトリを基準として相対的に解釈され、実際のクライアント ルートに加えて genfiles と bin のルート(blaze-genfiles/pkg/includedirblaze-out/pkg/includedir など)が含まれます。

COPTS とは異なり、これらのフラグはこのルールとそれに依存するすべてのルールに追加されます。(注: コンテナが依存するルールではありません)。広範囲の影響が及ぶ可能性があるため、注意が必要です。判断に迷う場合は、代わりに「-iquo」フラグを COPTS に追加してください。

sdk_dylibs

文字列のリスト。デフォルトは [] です。

リンクする SDK .dylib ライブラリの名前。たとえば、「libz」、「libarchive」など。バイナリの依存関係ツリーに C++ ソースまたは Objective-C++ ソースが含まれている場合は、libc++ が自動的にインクルードされます。バイナリをリンクすると、そのバイナリの推移的依存関係グラフで指定されたすべてのライブラリが使用されます。
sdk_frameworks

文字列のリスト。デフォルトは [] です。

リンクする SDK フレームワークの名前(「AddressBook」、「QuartzCore」など)。

トップレベルの Apple バイナリをリンクすると、そのバイナリの推移的依存関係グラフにリストされているすべての SDK フレームワークがリンクされます。

sdk_includes

文字列のリスト。デフォルトは [] です。

このターゲットと依存するすべてのターゲットに追加する #include/#import 検索パスのリスト。各パスは $(SDKROOT)/usr/include からの相対パスです。
textual_hdrs

ラベルのリスト。デフォルトは [] です。

このルールのソースファイルまたはこのライブラリのユーザーによってヘッダーとして含まれる C、C++、Objective-C、Objective-C++ ファイルのリスト。hdrs とは異なり、ソースとは別にコンパイルされることはありません。
weak_sdk_frameworks

文字列のリスト。デフォルトは [] です。

弱いリンクを設定する SDK フレームワークの名前。たとえば、「MediaAccessibility」です。定期的にリンクされる SDK フレームワークとは異なり、弱くリンクされたフレームワークのシンボルは、実行時に存在していなくてもエラーになりません。

objc_library

ルールのソースを表示
objc_library(name, deps, srcs, data, hdrs, alwayslink, compatible_with, copts, defines, deprecation, distribs, enable_modules, exec_compatible_with, exec_properties, features, implementation_deps, includes, linkopts, module_map, module_name, non_arc_srcs, pch, restricted_to, sdk_dylibs, sdk_frameworks, sdk_includes, stamp, tags, target_compatible_with, testonly, textual_hdrs, toolchains, visibility, weak_sdk_frameworks)

このルールは、指定された Objective-C ソースファイルから静的ライブラリを生成します。

引数

属性
name

名前(必須)

このターゲットの一意の名前。

deps

ラベルのリスト。デフォルトは [] です。

このターゲットが依存するターゲットのリスト。
srcs

ラベルのリスト。デフォルトは [] です。

ライブラリ ターゲットを作成するために処理される C、C++、Objective-C、Objective-C++ のソースファイルとヘッダー ファイル、および/またはアセンブリ ソースファイル(.s、.S、.asm)のリスト。これらは、チェックインしたファイルと、生成されたすべてのファイルです。 ソースファイルは Clang で .o ファイルにコンパイルされます。ヘッダー ファイルは、このターゲットの srcs 属性の任意のソースまたはヘッダーによってインクルード/インポートできますが、このルールに依存する hdrs またはターゲットのヘッダーではインクルードできません。また、プリコンパイル済みの .o ファイルは srcs として指定される場合があります。シンボル リンカーの欠落エラーを回避するため、提供された .o ファイルのアーキテクチャとビルドのアーキテクチャの整合性に注意してください。
hdrs

ラベルのリスト。デフォルトは [] です。

依存ルールのソースによってインクルードされることになるため、このライブラリによってパブリッシュされる、C、C++、Objective-C、Objective-C++ のヘッダー ファイルのリスト。

これらのヘッダーは、ライブラリの公開インターフェースを記述するもので、このルールまたは依存ルールのソースがインクルードできるようになります。このライブラリのクライアントによってインクルードされることを意図していないヘッダーは、srcs 属性でリストする必要があります。

モジュールが有効になっている場合、これらはソースとは別にコンパイルされます。

ブール値。デフォルトは False です。

1 の場合、このライブラリに(直接的または間接的に)依存するバンドルまたはバイナリは、srcsnon_arc_srcs にリストされているファイルのすべてのオブジェクト ファイルにリンクします。これには、バイナリによって参照されるシンボルが含まれていないファイルも含まれます。 これは、バイナリ内のコードによってコードが明示的に呼び出されていない場合(たとえば、なんらかのサービスから提供されるコールバックを受け取るようにコードが登録されている場合)に役立ちます。
copts

文字列のリスト。デフォルトは [] です。

コンパイラに渡す追加のフラグ。 「変数を作成」の置換と Bourne シェルのトークン化が適用されます。これらのフラグはこのターゲットにのみ適用され、依存するフラグや依存するフラグには適用されません。

生成された Xcode プロジェクトでは、copts で「-I」フラグを使用して指定されたディレクトリ パスが解析され、相対パスの場合は先頭に「$(WORKSPACE_ROOT)/」が付加され、関連付けられた Xcode ターゲットのヘッダー検索パスに追加されます。

defines

文字列のリスト。デフォルトは [] です。

コンパイラに渡す追加の -D フラグ。形式は KEY=VALUE または単に KEY にする必要があります。また、このターゲットのコンパイラ(copts と同様)だけでなく、このターゲットのすべての objc_ 依存先にも渡されます。「変数を作成」の置換と Bourne シェルのトークン化が適用されます。
enable_modules

ブール値。デフォルトは False です。

clang モジュールのサポートを有効にします(-fmodules を使用)。 これを 1 に設定すると、システム ヘッダーやその他のターゲットを @import できます。 @import UIKit; @import path_to_package_target;
implementation_deps

ラベルのリスト。デフォルトは [] です。

ライブラリ ターゲットが依存する他のライブラリのリスト。deps とは異なり、これらのライブラリのヘッダーとインクルード パス(およびそのすべての推移的依存関係)は、このライブラリのコンパイルにのみ使用され、このライブラリに依存するライブラリには使用されません。implementation_deps で指定されたライブラリは、このライブラリに依存するバイナリ ターゲットにリンクされます。
includes

文字列のリスト。デフォルトは [] です。

このターゲットと依存するすべてのターゲットに追加する #include/#import 検索パスのリスト。これは、#import/#include ステートメントでワークスペース パス全体を指定していないサードパーティ ライブラリとオープンソース ライブラリをサポートするためです。

パスはパッケージ ディレクトリを基準として相対的に解釈され、実際のクライアント ルートに加えて genfiles と bin のルート(blaze-genfiles/pkg/includedirblaze-out/pkg/includedir など)が含まれます。

COPTS とは異なり、これらのフラグはこのルールとそれに依存するすべてのルールに追加されます。(注: コンテナが依存するルールではありません)。広範囲の影響が及ぶ可能性があるため、注意が必要です。判断に迷う場合は、代わりに「-iquo」フラグを COPTS に追加してください。

linkopts

文字列のリスト。デフォルトは [] です。

リンカーに渡す追加のフラグ。
module_map

ラベル: デフォルトは None

このターゲットのカスタム Clang モジュール マップ。カスタム モジュール マップの使用はおすすめしません。ほとんどのユーザーは、Bazel で生成されたモジュール マップを使用する必要があります。指定すると、Bazel はこのターゲットのモジュール マップを生成しませんが、提供されたモジュール マップをコンパイラに渡します。
module_name

文字列。デフォルトは ""

このターゲットのモジュール名を設定します。デフォルトでは、モジュール名はターゲット パスで、すべての特殊記号は _ で置き換えられます。たとえば、//foo/baz:bar は foo_baz_bar としてインポートできます。
non_arc_srcs

ラベルのリスト。デフォルトは [] です。

ARC を使用しないライブラリ ターゲットを作成するために処理される Objective-C ファイルのリスト。この属性内のファイルは、srcs 属性内のファイルと同様に扱われますが、ARC を有効にせずにコンパイルされます。
pch

ラベル: デフォルトは None

コンパイルされるすべてのソースファイル(arc と non-arc の両方)の先頭に付加するヘッダー ファイル。BUILD ファイルでの pch ファイルの使用は積極的におすすめしません。これは非推奨と見なされます。pch ファイルは実際にはプリコンパイルされないため、これはビルド速度の強化ではなく、グローバルな依存関係にすぎません。ビルド効率の観点から見ると、実際に必要な場所に必要なものをソースに直接含めるほうがよいでしょう。
sdk_dylibs

文字列のリスト。デフォルトは [] です。

リンクする SDK .dylib ライブラリの名前。たとえば、「libz」、「libarchive」など。バイナリの依存関係ツリーに C++ ソースまたは Objective-C++ ソースが含まれている場合は、libc++ が自動的にインクルードされます。バイナリをリンクすると、そのバイナリの推移的依存関係グラフで指定されたすべてのライブラリが使用されます。
sdk_frameworks

文字列のリスト。デフォルトは [] です。

リンクする SDK フレームワークの名前(「AddressBook」、「QuartzCore」など)。

トップレベルの Apple バイナリをリンクすると、そのバイナリの推移的依存関係グラフにリストされているすべての SDK フレームワークがリンクされます。

sdk_includes

文字列のリスト。デフォルトは [] です。

このターゲットと依存するすべてのターゲットに追加する #include/#import 検索パスのリスト。各パスは $(SDKROOT)/usr/include からの相対パスです。
stamp

ブール値。デフォルトは False です。

textual_hdrs

ラベルのリスト。デフォルトは [] です。

このルールのソースファイルまたはこのライブラリのユーザーによってヘッダーとして含まれる C、C++、Objective-C、Objective-C++ ファイルのリスト。hdrs とは異なり、ソースとは別にコンパイルされることはありません。
weak_sdk_frameworks

文字列のリスト。デフォルトは [] です。

弱いリンクを設定する SDK フレームワークの名前。たとえば、「MediaAccessibility」です。定期的にリンクされる SDK フレームワークとは異なり、弱くリンクされたフレームワークのシンボルは、実行時に存在していなくてもエラーになりません。