以下の解説は、ダウンロードコーナーで配布している最新版の開発環境を前提にしたものです。旧版の環境を使用する場合には、導入編を参照して下さい。
以下説明が長いですが、要は、画面右側ウィンドウの項目名をダブルクリックすると、コンパイルができて、マイコンにプログラムが書き込めるということです。
・[初めて使うとき]と[makefileを変更したとき]はall_cleanをダブルクリックしてから、allをダブルクリック。
・[ソースコードを修正したとき]はallだけをダブルクリック。
・その後でflashをダブルクリックするとマイコンに書き込まれます。
本書の開発環境はEclipseを使用していますが、ビルドはEclipseのビルド機能(ビルドインされているmake)ではなく、makefileで設定をして、makeを実行するようにしています。これは、設定の柔軟性が高いことと、コマンドラインからでも実行できるようにするためです。こうしておくと、makefileだけを配布することもできますので、ビルド環境を共有しやすいと考えています。
とはいってもC/C++版Eclipseには、makefile上のターゲットを直接指定してビルドを実行できる機能が備わっています。これを使用すると、ターゲット名をダブルクリックするだけでビルドが実行できます。 ターゲット名はmakefile内のターゲット名と同一にしています。makeには、開発環境に同梱しているYAGARTOのmakeを使用しています。
Eclipseの画面右側にMake Targetsというビューがあります。STM32を展開すると、ターゲット名が書いている緑色の二重丸のようなアイコンが現れます。これをダブルクリックすると、ビルドが実行されます。どのターゲットをダブルクリックするかで、実行される内容が変わってきます。
all | 開発環境のツリー内に含まれている全てのソースコードをコンパイルします。ただしmakefileで除外されているものはコンパイルしません。コンパイル後、binフォルダにマイコン書き込み用のイメージファイルを作成します。動作としては、下記のlibターゲットとmainターゲットを順に実行しているだけです。 |
all_clean | 開発環境のツリー内に含まれている全てのバイナリコードとアセンブラコードを削除します。 |
flash | 実行時点でbinフォルダに存在しているバイナリファイル(ROM書き込み用のイメージファイル)を、マイコンに書き込みます。 |
lib | 開発環境のツリーのlibフォルダ以下のコード(ST社の各種ライブラリと筆者が作成したライブラリ)をコンパイルします。コンパイル後、アーカイブファイルの作成まで行います。 |
lib_asm | 開発環境のツリーのlibフォルダ以下のコード(ST社の各種ライブラリと筆者が作成したライブラリ)をアセンブリ言語にコンパイルします。 |
lib_clean | 開発環境のツリーのlibフォルダ以下に含まれる全てのバイナリコードとアセンブラコードを削除します。 |
main | プロジェクトルート・srcフォルダ・incフォルダに含まれているコードをコンパイルします。コンパイル後、binフォルダにマイコン書き込み用のイメージファイルを作成します。 |
main_asm | プロジェクトルート・srcフォルダ・incフォルダに含まれているコードをアセンブリ言語にコンパイルします。 |
main_clean | プロジェクトルート・srcフォルダ・incフォルダに含まれているコードを削除します。 |
開発環境を使用して初めてビルドをするときには、all_cleanを実行してから、allを実行して下さい。all_cleanを実行しないと、ソースコードの変更が無いと見なされて、古い設定に合わせてしかコンパイルされない恐れがあります。このときコンパイルにはある程度の時間がかかります。
ソースコードを新規作成、変更したときは、allを実行して下さい。新規作成又は変更されたコードのみコンパイルされますので、コンパイルにはそれほど時間はかかりません。ただしlibフォルダ内のコードを変更した場合には、アーカイブファイルの再作成のため、多くのファイルがコンパイルされる場合があります。
allターゲットの実行時には、リンク前オブジェクトファイル(拡張子o)の生成だけでなく、マイコンに書き込むためのイメージファイルも同時に作成します。binフォルダにHEX/BINの2種類のイメージファイルが生成されます。どちらもROMイメージとしては同じものですが、利用する書き込み手段によって使用するファイルがことなるので、両方同時に生成させています。
libとmainは、コンパイルする対象が、ライブラリ部分か、ユーザプログラム部分かの違いです。asmがついているものは、アセンブリ言語までのコンパイルを行い、オブジェクトファイルの生成を行いません。アセンブリ言語でのステップ数の確認等に使用して下さい。
allターゲットは実際にはlibターゲットとmainターゲットを実行しているだけです。イメージファイルの生成はmainターゲットの機能になります。