7.34 スキャッタファイルの前処理

C プリプロセッサを使用して、スキャッタファイルを渡すことができます。これにより、C プリプロセッサのすべての機能にアクセスできるようになります。

スキャッタファイルの最初の行で、リンカがこのファイルを処理するために呼び出すプリプロセッサコマンドを指定します。このコマンドの形式を以下に示します。

#! preprocessor [pre_processor_flags]

一般的には、#!armcc -E というコマンドが使用されます。このコマンドは、 armcc プリプロセッサを使用して、スキャッタファイルを渡します。

以下のことができます。

  • プリプロセッシングディレクティブをスキャッタファイルの先頭に追加します。

  • スキャッタファイル内の単純な式の評価を使用します。

例えば、スキャッタファイル file.scat には以下のようなコマンドを含めます。

#!armcc -E #define ADDRESS 0x20000000 #include "include_file_1.h" lr1 ADDRESS {
    … }

リンカによって、前処理済みのスキャッタファイルが解析され、ディレクティブがコメントとして処理されます。

また、スキャッタファイルの前処理を --predefine コマンドラインオプションと共に使用することもできます。この例では、以下のようにします。

  1. file.scat を変更して、ディレクティブ #define ADDRESS 0x20000000 を削除します。

  2. 以下のコマンドを指定します。

    armlink --predefine="-DADDRESS=0x20000000" --scatter=file.scat

armcc -E のデフォルト動作

armlink は他の ARM ツールを呼び出すとき armcc と同じように動作します。それによって armcc バイナリが次の順序で検索されます。

  • armlink と同じ場所。

  • PATH の場所

armcc はどの相対 #include にも有効なように、-Iscatter_file_path オプション付きで呼び出されます。リンカは、指定されたプリプロセッサツールのフルネームが armcc または armcc.exe の場合にのみ、このオプションを追加します。つまり、絶対パスまたは相対パスが指定されている場合、リンカはプリプロセッサに対して -Iscatter_file_path オプションを指定しません。これは、--cpu オプションについても同様です。

Windows では、 armcc.exe armcc と同一とみなされるように .exe 接尾文字が処理されます。実行可能ファイルの名前では大文字と小文字が区別されません。したがって、 ARMCC armcc と同じとみなされます。スキャッタファイルのプリプロセス行を移植可能な方法で書くには、大文字を正しく使って .exe 接尾文字を省略します。

その他のプリプロセッサの使用

プリプロセスのコマンドラインはホストシステムで正しく実行されるように書かれていなければなりません。それには、以下を確認します。

  • 文字列はホスト用に正しく引用符で囲まれていること。移植可能にするには二重引用符を使用します。

  • 単一引用符とエスケープ処理した文字はサポートされていないので正しく機能しない可能性があります。

  • パス名での二重引用符の使用はサポートされていないので機能しない可能性があります。

これらの規則は --predefine オプションを使って渡す文字列すべてに適用されます。

すべてのプリプロセッサ実行可能ファイルは -o file オプションをファイルへの出力を意味するものとして受け入れ、コマンドライン上の入力を filename 引数として受け入れる必要があります。これらのオプションは armlink によって自動的にユーザーのコマンドラインに追加されます。プリプロセス出力をユーザー指定のコマンドラインに転送するオプションはサポートされていません。

関連する概念
8.20 スキャッタファイル内の式の評価
関連する参考文書
12.111 --predefine="string"
非機密扱いPDF file icon PDF 版ARM DUI0474JJ
Copyright © 2010-2013 ARM.All rights reserved.