マルチプル・コンパイレーション・ユニットの使用について
マルチプル・コンパイレーション・ユニットを使ったプロジェクトの作成には次のIDEバージョンが必要です:PCW, PCWH, PCWHD, PCDIDE
CCS Cコンパイラは1つのコンパイル単位(ユニット)のみが使われます。そして、複数のファイルは#INCLUDEファイル を使ってインプリメントされます。マルチプル・コンパイレーション・ユニットの使用にはコンパイルを制御するプリプロセッサー・コマンドが すべてのユニットにわたって適合しているか注意を払う必要があります。すべてのユニットによりインクルードされているインクルード・ファイルに中に #FUSES, #USEのようなプリプロセッサ・コマンドとデバイス・ヘッダー・ファイルを含めることをお勧めします。 ユニットがコンパイルされるときリローケタブル・オブジェクト・ファイル(.*.o)とシンボル・ファイル(.*.osym)を出力します。
以下はマルチプル・コンパイレーション・ユニット例の概要です。ここで使われているサンプルはMCU.zipをダウンロードしてご覧下さい。
プロジェクト・サンプルに含まれているファイル:
プロジェクト・サンプルに含まれているファイル | |
---|---|
ファイル | 目的 |
main.c | 最初のコンパイル・ユニットのための基本ファイル |
filter.c | 2番目のコンパイル・ユニットのための基本ファイル |
report.c | 3番目のコンパイル・ユニットのための基本ファイル |
project.h | 全ユニットが含まれたプロジェクト全体の定義を持ったヘッダー・ファイル |
filter.h | filter.c関数を使用するすべてのユニットが含まれたfilter.cための外部定義を含むヘッダー・ファイル |
report.h | report.c関数を使用するすべてのユニットが含まれたreport.cための外部定義を含むヘッダー・ファイル |
project.c | Linker.batのためのプロジェクト内でユニットのリストをインポートするために使用されるファイル |
project.pjt | build.batのためのプロジェクト内でユニットをリストするために使用されるプロジェクト・ファイル |
build.bat | コンパイルされリンクされる必要のあるユニットをコンパイルするバッチ・ファイル |
buildall.bat | 全てのユニットをコンパイルしリンクするバッチ・ファイル |
linker.bat | スクリプトを使って全ユニットをコンパイルしリンクするバッチ・ファイル |
ファイル概要 | |||
---|---|---|---|
main.c | filter.c | report.c | |
#INCLUDE |
project.h filter.h report.h |
project.h report.h |
project.h |
定義 |
main( ) |
clear_data( ) filter_data( ) |
report_data_line( ) report_line_number( ) report_error( ) |
使用 |
clear_data( ) filter_data( ) report_data_line( ) report_line_number( ) |
report_error( ) |
コンパイレーション・ファイル | |
---|---|
ファイル | 目的 |
*.o | 各ユニットにより生成されたリローケタブル・オブジェクト・ファイル |
*.err | 各ユニットにより生成されたエラー・ファイル |
*.osym | 各ユニットにより生成されたユニットのシンボル・ファイル |
project.hex | プロジェクトのために生成されたプログラム・イメージ |
project.lst | プロジェクトのために生成されたCとASMリスティング・ファイル |
project.sym | プロジェクトのために生成されたプロジェクト・シンボル・ファイル |
project.cof | プロジェクトのために生成されたデバッガ・ファイル |
プロジェクトをコンパイルするために使用される適応可能オプションを下記から選択:
- プロジェクトをビルドするためのコマンド-ラインの使用
- プロジェクトで変更されたファイルを再ビルドするためのコマンド-ラインの使用
- リンカー・スプリプトの使用
- CCS PCW IDEの使用
- MPLAB IDEの使用
- 追加ノート
プロジェクトをビルドするためのコマンド-ラインの使用
- プロジェクトのためのソースファイルのすべてを単一のディレクトリに移動して下さい
- テキスト・エディタを使用し、ファイルをコンパイルしてプロジェクトをビルドするために以下のサンプルをベースとしたファイル buildall.bat を作成してください
- CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
- 追加コンパイラ・オプションを追加して下さい
- 必要な*.c ファイルをインクルードするためにEXPORTオプションを使います
- *.hex ファイルを生成するためにLINK オプションを使います
- buildall.batファイルの上でダブルクリックするか、又は、全てのファイルを使ってプロジェクトをビルドするために コマンドBUILDALLでコマンド・プロンプトを使用して下さい
"C:\Program Files\PICC\CCSC.exe" +FM +EXPORT report.c "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT filter.c "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT main.c "C:\Program Files\PICC\CCSC.exe" +FM LINK="project.hex=report.o,filter.o,main.o"
プロジェクトをコンパイル、そして、ビルドするためのファイルを作成する時は次のガイドラインに従って下さい:
プロジェクトで変更されたファイルを再ビルドするためのコマンド・ラインの使用
- プロジェクトにリンクする必要のあるファイルをインクルードするために以下の例をベースとしたファイルproject.pjt をテキスト・エディタを使用して作成してください
- そのプロジェクトで変更され再ビルドするファイルのみをコンパイルし、プロジェクトを再ビルドするためにはテキスト・エディタを使用し 以下の例をベースとしたファイルbuild.batを作成して下さい
- CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
- 追加コンパイラ・オプションを追加して下さい
- *.pjt ファイルを指定するためにBUILDオプションを使用
- build.batファイルの上でダブルクリックするか、又は、変更したファイルのみを使ってプロジェクトを再ビルドするために コマンドBUILDALLでコマンド・プロンプトを使用して下さい
[Units] Count=3 1=report.o 2=filter.o 3=main.o Link=1
"C:\Program Files\PICC\CCSC.exe" +FM BUILD=project.pjt
プロジェクトをコンパイルし、そして、ビルドするためにファイルを作成する時は次のガイドラインに従って下さい:
リンカー・スクリプトの使用
- プロジェクトのためにリンクするのに必要なファイルをインクルードするために以下の例をベースとしたファイルをテキスト・エディタを使用し project.c を作成して下さい
- ファイルをコンパイルし、プロジェクトをビルドするためにはテキスト・エディタを使用し以下の例をベースとしたファイルlinker.batを作成して下さい
"C:\Program Files\PICC\CCSC.exe" +FM +EXPORT report.c "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT filter.c "C:\Program Files\PICC\CCSC.exe" +FM +EXPORT main.c "C:\Program Files\PICC\CCSC.exe" +FM project.c
プロジェクトをコンパイルし、そして、ビルドするためにファイルを作成する時は次のガイドラインに従って下さい:
- CCS Cコンパイラのインストレーション・ディレクトリ内のCCSC.exeファイルにパスが通ってなければいけません
- 追加コンパイラ・オプションを追加して下さい
- 必要な*.c ファイルをインクルードするためにEXPORTオプションを使います
- linker.batファイルの上でダブルクリックするか、又は、全てのファイルを使ってプロジェクトをビルドするために コマンド LINKERでコマンド・プロンプトを使用して下さい
#import(FILE=report.o) #import(FILE=filter.o) #import(FILE=main.o)
CCS PCW IDE[ウィンドウズ版]で使用
- PCW IDEを開き、そして、メイン・メニューのトップにあるProject -> Createオプションを選択して下さい。 プロジェクトのメイン・ソースを選択するためのウィンドウが表示されます
- Project Optionsウィンドウが現れた時、プロジェクトで使用されるチップのタイプを選択します。 オプション Multiple Compilation Units とLink Separatelyの隣のボックスをチェックにして下さい; これは追加ソース・ファイルの追加が出来るようになります。+Addボタンをクリックしプロジェクトで使われる他のソース・ファイルを 選択してリストに追加します。プロジェクトを作成するためにApplyボタンをクリックします
- ファイルをコンパイルし、そしてプロジェクトをビルドするためにメイン・ウィンドウのトップにあるCompileを選択するか、 もし、クラシック・スタイルのIDEを使用の場合はメニュー・バーから次のオプションの1つを選択して下さい:
コンパイレーション・オプション | |
---|---|
オプション | 目的 |
Compile | 現在のプロジェクトのすべてのユニット、又は、ドロップ-ダウン・メニューから選択された単一ユニットをコンパイル |
Build | 最後のコンパイルの後に変更されたユニットをコンパイルしプロジェクトをビルド |
Build All | すべてのユニットをコンパイルしプロジェクトをビルド |
Clean | プロジェクトのために出力ファイルを削除 |
- ファイルがコンパイルされた後、コンパイレーションの間に使われたファイルがFilesパネルのユニット名の下に表示されます
MPLABを使用
- MPLAB IDEを開き、メニュー・バーからProject -> Newを選択します。プロジェクトのメイン・ソース・ファイルを選択するように聞いてきます
- メニュー・バーからProject -> Select Language Toolsuite...を選択します。 ウィンドウが表示されますのでActive Toolsuite:フィールドのドロップ-ダウン・リストからCCS C Compiler を選択して下さい。 コンパイラーの正しいディレクトリー位置が表示されているか確認して下さい
- メニュー・バーからConfigure -> Select Device...を選択して下さい。ウィンドウが現れますので、 リストから正しいPIC® MCU 又は、PIC® DSCを選択して下さい
- プロジェクトにソース・ファイルを追加するには、メニューバーのProject -> Add File to Project...オプションを選択するか、 又は、プロジェクトウィンドウのSource Filesフォルダーの上で右クリックしてAdd Files...を選択します。 ウィンドウが表示されますのでプロジェクトに追加するためにソース・ファイルを選択して下さい
- メニュー・バーのProject -> Build Options...を選択します。現れるウィンドウから出力ディレクトリー、インクルード・ディレクトリー、 生成された出力ファイル等プロジェクト全体、又は、個々のユニットの変更が出来ます
- プロジェクトでファイルをコンパイル、プロジェクトをビルドするためにメニュー・バーにあるProjectを選択するか、 又は、Projectウィンドウのファイル上で右クリックします。次のオプションの1つを選択して下さい:
コンパイレーション・オプション | |
---|---|
オプション | 目的 |
Compile | 選択されたユニットをコンパイルします。コンパイルの後にプロジェクトを再リンクしません |
Make | 最後のコンパイルの後に変更されたユニットをコンパイルしプロジェクトを再ビルドします |
Build All | すべてのユニットをコンパイルし、中間ファイルを削除、そして、プロジェクトをビルド |
Clean | プロジェクトのために出力ファイルを削除 |
- プロジェクトに1つのソース・ファイルしかない場合、ワンステップでコンパイルとリンクはされますので、*.oファイルは作成されません。 *.oファイルは既にコンパイルされていてプロジェクトて追加することが出来る場合にプロジェクトの作成/ビルドのプロセスの間にリンクされます
ノート:
追加ノート
- 変数、又は、関数を単一ユニットに対してプライベートにするにはキーワード staticを使います。 デフォルトでユニット・レベル(関数の外)で変数が宣言されますと変数は全ての他のユニットに見えることになります。 staticsキーワードがローカル・ユニットの外でアクセスされる関数、又は、変数で使用されるとリンク・タイム・エラーになります
- もし、2つのユニットが関数、又は、ユニット変数が同じ名前を持つ時は以下の1つで無い限りエラーが発生します:
- 識別子がキーワードstaticで修飾されている
- 引数リストが異なり、そして、通常のオーバーロード規則に従って関数の二つのインスタンスはプロジェクトで共存できます。
- ?関数の内容が全く同じである。同じ*.h ファイルがマルチプル・ファイルに含まれている場合、リンカーは単に重複した関数を削除します
- マルチプル・コンパイレーション・ユニットを持ったプロジェクトではproject.hのように全てのユニットが#INCLUDES, #DEFINES, プリ-プロセッサの様な ファイルをインクルードするのが最善です。このファイルはプロジェクト内の全てのユニットで同じで有るべき、チップ、速度、 ヒューズとその他多くのの設定を定義します
- プリプロセッサ・ディレクティブのような設定がユニットの間のメイン・インクルード・ファイルに含まれている時、ライブラリは各ユニットに作成されます。 リンカはライブラリが重複していることを決定し最終的なリンクの過程の間にそれらを削除します
- プロジェクトがビルドされる時、そのプロジェクトで使用される各ユニットは固有のエラー・ファイルを持っています。 *.batファイルでコンパイルされた時、それは最初のエラーでバッチの実行を停止するのに有効です。 +CCコマンド・ライン・オプションを使用しますとコンパイルに失敗した場合にコンパイラはエラー・コードを返します