ビルド方法

以下の解説は、ダウンロードコーナーで配布している最新版の開発環境を前提にしたものです。旧版の環境を使用する場合には、導入編を参照して下さい。

以下説明が長いですが、要は、画面右側ウィンドウの項目名をダブルクリックすると、コンパイルができて、マイコンにプログラムが書き込めるということです。

・[初めて使うとき]と[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ターゲットの機能になります。