見出し画像

プログラミングガイド「ビルド設定リファレンス」(L部)

Build settings reference」の私家版和訳です。

ルート/←K部/→M部

1. リンカー依存情報ファイルへのパス (LD_DEPENDENCY_INFO_FILE)

この設定は、リンカがどのファイルを入力として使用し、どのファイルを生成したかの情報を出力するパスを定義します。Xcodeはこの情報を依存性の追跡に使用します。この設定の値を空に設定すると、このオプションをリンカに渡すことができなくなります。

2. 動的ライブラリで許可されるクライアント (LD_DYLIB_ALLOWABLE_CLIENTS)

この設定は、リンカに「-allowable_client」を渡すことで、dylibをリンクできるクライアントを制限します。

3. 動的ライブラリのインストール名 (LD_DYLIB_INSTALL_NAME)

動的ライブラリ内部の「install path」(LC_ID_DYLIB)を設定します。このライブラリにリンクされているクライアントは、dyldがこのライブラリを探す方法としてこのパスを記録します。このオプションが指定されていない場合は、「-o」パスが使われます。この設定は、動的ライブラリ以外のプロダクトをビルドする際には無視されます。動的ライブラリ・プログラミング・トピックスを参照してください。

4. リンクマップファイルを書き込む (LD_GENERATE_MAP_FILE)

この設定を有効にすると、リンカは出力イメージ内の全てのシンボルとそのアドレスの詳細なマップファイルをディスクに書き込みます。マップファイルへのパスは、リンクマップファイルへのパス (LD_MAP_FILE_PATH)設定で定義されます。

5. リンクマップファイルへのパス (LD_MAP_FILE_PATH)

この設定は、リンクマップファイルを書き込む (LD_GENERATE_MAP_FILE)設定が有効なときにリンカによって書き込まれるマップファイルへのパスを定義します。デフォルトでは、各アーキテクチャとビルド・バリアントごとに個別のファイルが書き込まれ、プロダクトがリンクされているターゲットのIntermediatesディレクトリに生成されます。

6. 位置依存の実行可能ファイルを生成する (LD_NO_PIE)

この設定を有効にすると、Xcodeが位置非依存(PIE)のメイン実行ファイルをビルドできなくなります。macOS 10.7以降をターゲットにしている場合、メイン実行ファイルのデフォルトはPIEなので、この設定を有効にすると動作が変わります。OS X 10.6以前をターゲットにしている場合や、i386向けにビルドしている場合は、PIEがデフォルトではないので、この設定を有効にしても何の効果もありません。「-mdynamic-no-pic」でコンパイルした「.o」ファイルからPIEを作成することはできません。PIEを使うとコード生成の最適化が難しくなりますが、アドレスのランダム化によりセキュリティが向上します。

7. リンカー引数を引用する (LD_QUOTE_LINKER_ARGUMENTS_FOR_COMPILER_DRIVER)

この設定は、リンカへの引数を「-Xlinker」を使って引用するかどうかを制御します。デフォルトでは、Xcodeはターゲットのソースファイルをビルドするために使用されるコンパイラ・ドライバを呼び出すことでリンカを起動し、「-Xlinker」を引数の引用符に渡すことで、コンパイラ・ドライバが(ドライバ内で引数を評価しようとするのではなく)リンカに引数を渡すようになります。デフォルトでは、この設定は有効になっています。この設定を無効にすると、Xcodeは「-Xlinker」を使用してリンカに引数を渡さないようになります。この設定を無効にすると、ターゲットが別のリンカを使用するようにXcodeに指示していて(例えば、「LD」の設定を別のリンカへのパスに設定するなど)、その別のリンカが「-Xlinker」を認識しない場合に便利です。

8. Runpath検索パス (LD_RUNPATH_SEARCH_PATHS)

これは、作成される画像用の検索パスリストrunpathに追加される、パスのリストです。ランタイムでは、dyldは、loadパスが「@rpath/」で始まるdylibを検索する際にrunpathを使います。動的ライブラリ・プログラミング・トピックスを参照してください。

9. その他のLexフラグ (LEXFLAGS)

lexに渡す追加フラグの、スペース区切りリストです。スペースを含む可能性のあるパス名など、スペースや特殊文字を含む引数は必ずバックスラッシュでエスケープしてください。Xcodeがlexフラグ用UIを提供していない場合は、この設定を使用します。

10. 大文字と小文字を区別しないスキャナーを生成する (LEX_CASE_INSENSITIVE_SCANNER)

このオプションを有効にすると、lexは、大文字小文字を区別しないスキャナを生成します。lexの入力パターンで与えられた文字の大文字小文字は無視され、入力されたトークンは大文字小文字に関係なくマッチされます。マッチしたテキストは、yytextで指定された文字の大文字小文字を区別せずに保存されます(例えば、折りたたまれません)。

11. #lineディレクティブを挿入する (LEX_INSERT_LINE_DIRECTIVES)

このオプションを有効にすると、lexが#lineディレクティブを挿入するように指示し、アクション内のエラーメッセージが、元のlex入力ファイル(入力ファイルのコードに起因するエラーの場合)または「lex.yy.c」 (エラーがlexの誤りの場合)のいずれかを基準にして正しく配置されるようになります。このオプションは、デフォルトで有効になっています。このオプションを無効にすると、#lineディレクティブを挿入しないように、lexにフラグを渡します。

12. デフォルトルールを抑制する (LEX_SUPPRESS_DEFAULT_RULE)

このオプションを有効にすると、デフォルトのルール(一致しないスキャナ入力はstdoutにエコーされる)が抑制されます。スキャナがどのルールにも一致しない入力に遭遇した場合、エラーで異常終了します。このオプションは、スキャナのルールセットの穴を見つけるのに便利です。

13. 警告メッセージを抑制する (LEX_SUPPRESS_WARNINGS)

このオプションを有効にすると、lexの警告メッセージが表示されなくなります。

14. ライブラリ検索パス (LIBRARY_SEARCH_PATHS)

これは、プロダクトで使用されるライブラリの為に、リンカが検索するフォルダへのパスのリストです。パスは空白で区切られている為、空白を含むパスは適切に引用符で囲まれている必要があります。

15. マングル名を表示する (LINKER_DISPLAYS_MANGLED_NAMES)

この設定を有効にすると、リンカに C++シンボルのマングル名が表示されます。通常は推奨されませんが、この設定を有効にすることで、C++のリンクエラーの診断と解決に役立ちます。

16. 標準ライブラリとリンクする (LINK_WITH_STANDARD_LIBRARIES)

この設定を有効にすると、コンパイラ・ドライバは自動的に標準ライブラリをリンカに渡し、リンク時に使用します必要に応じて、このフラグを使用して標準ライブラリとのリンクを無効にし、個々のライブラリをその他のリンカーフラグ (OTHER_LDFLAGS)として渡すことができます。

17. リンク時の最適化 (LLVM_LTO)

この設定を有効にすると、リンク時にファイルの境界を跨いで最適化できます。

  • いいえ:無効にします。リンク時最適化を使用しません。
  • モノリシック・リンク時最適化:このモードでは、バイナリのモノリシック・リンクタイム最適化を実行し、全ての実行コードを 1 つのユニットに結合し、積極的なコンパイラ最適化を実行します。
  • インクリメンタル・リンク時最適化:このモードは、コンパイルユニット間でインライン化し、各ユニットで積極的なコンパイラ最適化を並列に実行する、バイナリのリンク時最適化を分割して行ないます。これにより、高速なインクリメンタルビルドが可能になり、モノリシック・リンク時最適化よりも少ないメモリ使用量で済みます。

18. ローカライズされた文字列マクロ名 (LOCALIZED_STRING_MACRO_NAMES)

ソースコード中で、ローカライズされた文字列を生成する為に使用される NSLocalizedStringライクなマクロや関数のベース名です。この設定が空であっても、デフォルトのNSLocalizedStringおよびCFCopyLocalizedStringのベース名は常に考慮されます。

19. ローカライズされた文字列Swift UIサポート (LOCALIZED_STRING_SWIFTUI_SUPPORT)

有効にすると、Swift UIからText()のイニシャライザーに渡されたリテラル文字列が、ローカライズのエクスポート時に抽出されます。

この記事が気に入ったらサポートをしてみませんか?