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

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 では、接尾文字 .exe が処理されるため、 armcc.exe は、 armcc と同じであると見なされます。実行可能ファイルの名前では、大文字と小文字は区別されません。このため、 ARMCC は、 armcc と同じであると見なされます。スキャッタファイルのプリプロセッシングラインを移植可能な方法で記述するには、適切に大文字を使用し、接尾辞 .exe を省略します。

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

プリプロセスのコマンドラインはホストシステムで正しく実行されるように書かれていなければなりません。それには、以下を確認します。
  • 文字列はホスト用に正しく引用符で囲まれていること。移植可能にするには二重引用符を使用します。
  • 単一引用符とエスケープ処理した文字はサポートされていないので正しく機能しない可能性があります。
  • パス名での二重引用符の使用はサポートされていないので機能しない可能性があります。
これらの規則は --predefine オプションを使って渡す文字列すべてに適用されます。
すべてのプリプロセッサ実行可能ファイルは -o file オプションをファイルへの出力を意味するものとして受け入れ、コマンドライン上の入力を filename 引数として受け入れる必要があります。これらのオプションは armlink によって自動的にユーザーのコマンドラインに追加されます。プリプロセス出力をユーザー指定のコマンドラインに転送するオプションはサポートされていません。
関連する概念
8.6 スキャッタファイル内の式の評価
関連する参考文書
12.110 --predefine="string"
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.