• Imagix 4D ユーザガイド
  • 目次

ステップ 1 - コンパイラ設定ファイルの設定

まず C / C++ ソフトウェアの注意事項として、プリプロセッサのオプションを正しく指定することは、コードをロードする上で概念的かつ技術的に、最も困難な部分であることを念頭においてください。

原理

ソースコードをコンパイルすると、Makefile、ビルドスクリプトまたは IDE が、ソースファイルのリストと併せて -I、-D、-U オプションをコンパイラに渡します。これらのオプションは、コンパイラがヘッダファイルを検索し、コードの解析時に使用するマクロ定義を判断するために使用されるのです。

これらのマクロは、処理の対象となるソースコード部分や、アナライザのビルトイン・プリプロセッサが無視する箇所を制御するため、#ifdef 文と併用して使用されます。例えば、PP Flags フィールドに「-Dfoo」と入力し、コードに「#ifndef foo」が記述されている場合、対応する #endif に到達するまで、それ以降のコードはスキップされます。ステップ2で、ビルドスクリプトまたは Makefile によって渡されるオプションの指定方法について説明します。

明示的に渡されるプリプロセッサ・オプションにくわえ、コンパイラは独自の暗黙的な -I、-D、-U オプションも使用します。これらのオプションはシステム・ヘッダファイルの検索や、精確な解析を実行するために必要となります。

Imagix 4D アナライザは、コンパイラに依存しません。コンパイラ固有のヘッダファイルの検索場所や、解析時に使用するマクロ定義を指定することで、Imagix 4D アナライザはコンパイラと同等の動作を行うことが可能です。

詳細については「コンパイラ設定ファイル」を参照してください。また、 gccベースのコンパイラ用の特別なユーティリティとMicrosoft Visual C++用の特別な操作があります。

方法

アナライザをコンパイラのように動作させるための方法が、2通り用意されています。1つは、コンパイラに明示的に渡される通常の -I、-D、-U オプションを指定する際に(ステップ 2で実施)、コンパイラによって暗黙的に追加される -I、-D、-U オプションを指定する方法です。

もう1つは、こちらが強く推奨される方法となりますが、Imagix 4D のコンパイラ設定ファイル(.inc ファイル)を使用したMakeの実行です。この方法では、設定ファイルにシステム・ヘッダファイルの場所およびマクロ定義を記述し、その後 [データソース] ダイアログ([プロジェクト] > [データソース])で、使用する設定ファイルを指定します。

これらの設定ファイルは ../imagix/user/cc_cfg ディレクトリに格納されており、この他にも .inc ファイルがいくつか保存されています。ファイルのベースとなる名前は、その特定の設定ファイルがサポートするコンパイラおよびターゲット・プラットフォームを示します。

設定ファイルを新規に追加したり、既存のものを修正したりすることも可能です。通常は各環境で実際にインストールされたシステム・ヘッダファイルの場所を反映するために、既存のファイルに定義されているシステム・インクルード・ディレクトリの場所を修正する必要があります。

通常の -I、-D、-U オプションにコンパイラが暗黙的に -I、-D、-U オプションを単純に追加することに比べ、コンパイラ設定ファイルを使用する方法には、いくつかのメリットがあります。まず、使用するコンパイル環境用の設定が既に存在する場合は、ユーザが行う一部の作業を省略することができます。次に、毎回、新しいプロジェクトを作成する場合とは対照的に、各環境に必要となる情報の設定作業は、一度だけで済みます。最後に、何度でも容易に設定を微調整することが可能です。

1a. コンパイラ設定ファイルの選択

../imagix/user/cc_cfg ディレクトリに移動し、各環境に合う設定ファイルを検索します。

gcc ベースのコンパイラを使用している場合、../imagix/bin/imagix-gnu ユーティリティを実行することで、自動的にコンパイラに対してクエリが行われ、各コンパイラや環境向けの設定ファイルが作成されます。

適切なファイルが存在しない場合は、使用するコンパイラやターゲットを示す名前を用いて、新規に設定ファイルを作成してください。このような場合でも、通常は類似のコンパイラ / ターゲット用の設定ファイルが既に存在していますので、それを作成した新しいファイルにコピーし適宜修正の上、利用することもできます。

1b. システム・ヘッダファイル用のパスの設定

設定ファイルを選択もしくは作成したのち、インクルード・ディレクトリの場所を、それぞれの環境に適合するよう修正します。各 .inc ファイルの冒頭には、1行以上にわたりヘッダファイルの場所を指定する行が記述されています。

arm_cross.inc ファイルから引用した例を、以下に示します。

/* ##################### 修正セクション ##################### */
/* 通常このセクションで、それぞれの環境に合わせて設定を変更します */

/* システム・ヘッダファイルの格納場所を指定します */
#pragma cmdflag -S/usr/arm/include

.inc ファイルの内容は、C コードとして処理されます。インクルード・ディレクトリは #pragma cmdflag -S... の行で指定します。同時に、#pragma cmdflag は、その行の後に続いて Imagix 4D のソースアナライザによってオプションとして処理される対象を指定します。システム・インクルード・ディレクトリの指定には、 -S オプションを使用してください。このオプションは、標準の -I オプションで指定された通常の(アプリケーション)インクルード・ディレクトリと、システム・インクルード・ディレクトリを区別します。

上記の例では、インクルード・ディレクトリ /usr/arm/include が1つだけ指定されています。Windows 環境の場合、以下のように適切な Windows のディレクトリの表記(環境により異なります)に、修正する必要があります。

/* システム・ヘッダファイルの格納場所を指定します */
#pragma cmdflag -SC:/Keil/ARM/ARMCC/include

インクルード・ディレクトリを追加するには、次のように .inc ファイルに新しい行を追記します。

/* システム・ヘッダファイルの格納場所を指定します */
#pragma cmdflag -Sc:/tools/arm/include
#pragma cmdflag -Sc:/tools/thirdparty/include

1行以上インクルード・ディレクトリが記述されている場合、設定ファイルに記述した順序で検索が実行されます。

1c. その他の設定変更

大半の設定ファイルの冒頭には、特定のプリプロセッサやコンパイラ・オプションに一致するよう、数多くの定義が記述されています。

以下に renesas_rx.inc ファイルの一部を、例として示します。

/* ターゲットのプリプロセッサ、あるいは命令セット・アーキテクチャを1つ指定します(コメントアウトを1つ解除) */
/* #define __RX200     */
/* #define __RX600     */
/* #define __RXV1      */
/* #define __RXV2      */


/* ################### 拡張修正セクション ################### */
/* このセクションでは、共通オプションを反映させるための変更を加えることができます */

/* さまざまなコンパイラ・オプションを指定します(任意のコメントアウトを解除)。
   また、コマンドライン・スイッチから呼び出すことも可能です。
   例えば、__IMGX_endian$61big_ は -endian=big と同じ働きをします。

/* #define __IMGX_endian$61big__ */       /* 増加するデータ用のエンディアン型をセットします */
/* #define __IMGX_round$61zero__ */       /* ゼロに丸めます */
/* #define __IMGX_denormalize$61on__ */   /* 非正規化を有効にします */
/* #define __IMGX_dbl_size$618__  */      /* 2倍の精度で double 型を処理します */
/* #define __IMGX_int_to_short__ */       /* int 型を short 型に置換します */

特定の定義をコメントアウト / コメントアウト解除することにより、個別のプリプロセッサや独自の設定に一致するよう .inc ファイルをセットアップすることが可能です。

別のページに記載のステップ 3では、解析結果のレビューや、コンパイラのドキュメントを理解する過程で、.inc ファイルを微調整する必要が生じることがあります。コンパイラ設定ファイルのカスタマイズ方法に関する詳細な説明は、../imagix/user/cc_cfg ディレクトリにある readme.txt を参照してください。