2020年5月20日MakefileをC++に対応させる前回、Makefileでのビルドを使ってLチカをしました。Makefile+CubeMX+CubeIDEでSTM32開発しかし、MakefileがC++でのビルドに対応していないので、cppファイルがあると読み込めません。変更してC++に対応させましたので、ここに残しておきます。makefileを以下のように編集します。$(BUILD_DIR)/*.d)前回との差分はこちらをご覧ください。次のテンプレートクラスを追加しています。val;}};これはニュートン法で平方根の値を求めるようなクラスです。=0.2236秒周期に収束するようなLチカをするようにしています。}以下にプロジェクトのリポジトリを残します。詰まったときに参考にしてください。CubeMXでコード生成3CubeIDEでデバッグとCubeIDEのみで全て完結します。一方で、この手法だと次のような欠点があります。・CubeIDEのバージョンアップやOS間、IDE間の移動に弱いCubeIDEは、基本的に同一のバージョンで利用することで安定したビルド環境が構築されますが、Makefileで管理すれば、CubeIDEだけでなく、VSCodeや他のIDEでもビルド環境が整います。面倒ですが、コマンドベースでの管理も可能です。・CubeIDE内のCubeMXが非常に酷なGUI狭い環境での操作を強要されます。(FullHDだと、ピン配置を見ながらタイマの設定なんてできたもんじゃないです。)CubeIDE内のMXではなく、CubeMXを単体で起動することで、ある程度開放されます。・プロジェクトファイルの管理がGUIベースインクルードパスなどの設定がEclipseベースGUIのため、ソースで管理しにくいです。xmlなので、ゴリ押し設定をできなくはないですが、そこまでしてやる意味あるの?と言われてしまうと疑問です。これらを解決するために、次のような手法を取ることで、より簡単に開発することができます。Debugを利用して開発をすすめる以下に概要図を載せます。それでは実際に作ってみましょう。今回はSTM32G431RBTの載った、NUCLEO-G431RBを使ってLチカをするプロジェクトを実際に作ってみます。今回は特にバージョンに縛られませんが、以下の環境にて確認致しました。Projectを作成CubeMXを利用してMakefileのプロジェクトを作成します。Projectから、マイコンを選ぶ。Mode?」の文字が出るので、迷わずYes。これはマイコンボードの標準の配置に(LEDなどすでにピンが確定しているもの)勝手に配置してくれます。このページを見ている皆様には釈迦に説法かもしれませんが、このページでピン配置や内部機能を設定することができます。今回はLチカができれば良いので、何も触らない。Managerタブに移り、ProjectNameを入力。今回は「G431RBMakeProj」とした。Toolchain/IDEに「Makefile」を入力。peripheralにチェックを入れる。これを入れることで、main.cにすべてのイニシャライズコードが記述されず、ソースが分離されるので管理しやすくなる。Projectのコードが作られる。Projectを作成します。ProjectこちらもNUCLEO-G431RBを選んでNextを押す。今回はProjectNameを「G431RB_Proj」としました。TypeにEmptyが選択されていることに注意。Finishを押すことでプロジェクトが生成されます。ここでプロジェクト内のすべてを消しておいてください。プロジェクトへ中身をコピーします。重複しているものは上書き保存です。CubeIDEに戻ります。このままだと、CubeIDEを再起動するまでコピーしたものが見えないので、プロジェクトをリフレッシュします。Settingsから次のように変更します。automaticallyのチェックを外す。directoryを次のようにする。(Buildを消す)これでプロジェクトの設定が終了しました。本当はこの段階ですべての工程が終了して、正しくビルド・デバッグが動作するはずですが、CubeMXのいつものガバで正しくビルドができないと思います。以下の工程は、そのうち必要なくなるかと思います。4Makefileを修正するMakefileの中のCPUを次のように直します。-mcpu=cortex-m45Lチカするmain関数にLチカコードを記述します。*/}手順は以上です。以下から本日作成したソースを取得できます。トラブルの際にご活用ください。LEDBlink_with_C以下に続きを書きました。Makefileを編集してcppのビルドに対応します。