kwinject によるビルド内のコマンドラインの処理方法
kwinject は、以下の規則を使用してビルド内のコマンドラインを処理します。
- 実行ファイルの名前は
kwfilter.conf
内の既知のコマンドのリストにある名前と比較され一致が試みられる。一致する名前が検出されない場合、そのコマンドは無視されます。 - kwfilter.conf 内で一致するレコードにフィルター名が含まれており、その名前がコンパイラフィルターファイル
<compiler_name>_filter.py
の名前の生成に使用されている。 - kwinject によりコンパイラフィルターファイルから一連の規則が読み込まれる。
- コマンドラインが、引数のリストに分割されている。
- kwinject 引数とオプションのリスト内を反復して、すべての引数に対するフィルター処理規則の適用が試行される。
注意
- 規則は、コンパイラフィルターファイル内で定義された順序に従って適用されます。つまり、構成ファイルで先に記述されている規則が優先されます。
- 規則は、kwinject に対してオプションまたは引数を無視するように指示することや、build specification (ビルドスペック) にコピーするように指示することもあります。
- 規則には、コマンドラインパーサーのステートに影響を及ぼす副作用がある場合もあります。たとえば、コンパイラの中には、ファイルを使用してオプションを渡すことをサポートしているものがあります (Microsoft Visual Studio や ARMCC など)。つまり、このようなオプションに対しては規則は kwinject にオプションを無視するように指示する一方、オプションファイルの内容をコマンドラインに挿入するように指示します。
1 つのコマンドラインからの複数のコンパイルまたはリンクレコード
build specification (ビルドスペック) 内では、単一のコマンドラインを複数のコンパイルまたはリンクレコードに変換できます。
たとえば、元のコマンドラインがいくつかのソースファイルをコンパイルするために使用された場合、kwinject は、build specification (ビルドスペック) 内に同じ数のコンパイルレコードを生成します。
別の例として、ほとんどのコンパイラにコンパイルとリンクを 1 つのステップで実行するためのオプションがあることが挙げられます。コンパイラフィルターファイル内の多数のタグが、特定のコマンドを kwinject によって 1 つまたは複数のコンパイルレコードに変換するかどうか、または一連のコンパイルとリンクのレコードに変換するかどうかを制御しています。