CS+上でビルドするのと同じコマンドを実行するバッチファイルを作成する方法の紹介

こんにちは、NoMaYです。

M3S-S2-TinyのCC-RLコンパイラの動作について、という別スレッドでCS+のGUI上変更出来ないオプションを変更してみたいことがあり、それならいっそのことと思い、画面コピーを取って、CS+上でビルドするのと同じコマンドを実行するバッチファイルを作成する方法をまとめてみました。(ただ、いざこの方法でやろうとしたら、先ほどの別スレッドでやりたかった事は簡単には行かない事が分かりましたが、、、)

それで、その手順なのですが、以下の(1)~(6)のようになります。

(1) ビルドツールの共通オプションのプロパティでビルドオプション一覧表示フォーマットを変更する

変更前
%TargetFiles% : %Program% %Options%


変更後
%Program% %Options%


(2) メニュー[ビルド]→[ビルドオプション一覧]を実行する




(3) ビルドツールの出力メッセージをバッチファイル(例:DefaultBuild\S2_sample_RL78G14.bat)へコピペして先頭と末尾に少し追加する

ビルドツールの出力メッセージ

========== ビルド・オプション一覧(2017年8月17日 0:14:28) ==========
------ ビルド・オプション一覧開始(S2_sample_RL78G14, DefaultBuild) ------
[共通オプションの設定状況]
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\ccrl.exe src\code_generator\r_cg_adc.c src\code_generator\r_cg_adc_user.c src\code_generator\r_cg_cgc.c src\code_generator\r_cg_cgc_user.c src\code_generator\r_cg_dac.c src\code_generator\r_cg_dac_user.c src\code_generator\r_cg_it.c src\code_generator\r_cg_it_user.c src\code_generator\r_cg_port.c src\code_generator\r_cg_port_user.c src\code_generator\r_cg_serial.c src\code_generator\r_cg_serial_user.c src\code_generator\r_cg_timer.c src\code_generator\r_cg_timer_user.c src\code_generator\r_main.c src\code_generator\r_systeminit.c src\sample\r_demo_sample.c src\sample\r_s2_decode.c src\sample\r_s2_encode.c src\sample\r_s2_peripheral_if.c src\tfat_mmc_if\r_tfat_drv_if.c src\glyph\Drivers\ST7579_LCD.c src\glyph\fonts\bitmap_font.c src\glyph\fonts\font_8x8.c src\glyph\fonts\font_8x16.c src\glyph\fonts\font_helvr10.c src\glyph\fonts\font_logos.c src\glyph\fonts\font_winfreesystem14x16.c src\glyph\fonts\font_x5x7.c src\glyph\fonts\font_x6x13.c src\glyph\glyph.c src\glyph\glyph_register.c src\glyph\lcd.c src\glyph\RDKRL78_spi.c lib\mmc_driver\com\r_mtl_com.c lib\mmc_driver\com\r_mtl_endi.c lib\mmc_driver\com\r_mtl_mem.c lib\mmc_driver\com\r_mtl_str.c lib\mmc_driver\com\r_mtl_tim.c lib\mmc_driver\mmc\r_mmc_io.c lib\mmc_driver\mmc\r_mmc_mmc.c lib\mmc_driver\mmc\r_mmc_sub.c lib\mmc_driver\mmc\r_mmc_usr.c lib\mmc_driver\mmc\rl78\r_mmc_csi.c -cpu=S3 -obj_path=DefaultBuild -dev=E:\tools\micom\Renesas\CS+\CC\Device\RL78\Devicefile\DR5F104PJ.DVF -c -g -g_line -I lib\tfat\lib -I lib\s2\lib -I lib\mmc_driver\mmc\rl78\rl78g14_csi_ccrl -I lib\mmc_driver\mmc -I lib\mmc_driver\com\rl78_32MHz_CCRL -I lib\mmc_driver\com\rl78_24MHz_CCRL -I lib\mmc_driver\com\rl78_20MHz_CCRL -I lib\mmc_driver\com -I src\glyph -I src\glyph\Drivers -I src\tfat_mmc_if -I src\sample -I src\code_generator -I .\ -preinclude=iodefine.h -D YRDKRL78G14 -memory_model=medium -asm_path=DefaultBuild -msg_lang=japanese
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\ccrl.exe cstart.asm stkinit.asm lib\s2\lib\adpcm_decoder_rl78_ccrl.asm lib\s2\lib\adpcm_encoder_rl78_ccrl.asm lib\s2\lib\adpcm_table_rl78_ccrl.asm -cpu=S3 -obj_path=DefaultBuild -dev=E:\tools\micom\Renesas\CS+\CC\Device\RL78\Devicefile\DR5F104PJ.DVF -c -g -msg_lang=japanese
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\rlink.exe -subcommand=DefaultBuild\S2_sample_RL78G14.clnk
------ ビルド・オプション一覧終了(エラー:0個, 警告:0個)(S2_sample_RL78G14, DefaultBuild) ------
========== 終了しました(成功:1プロジェクト, 失敗:0プロジェクト)(2017年8月17日 0:14:28) ==========

バッチファイル(例:DefaultBuild\S2_sample_RL78G14.bat)

cd /d "%~dp0.."
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\ccrl.exe src\code_generator\r_cg_adc.c src\code_generator\r_cg_adc_user.c src\code_generator\r_cg_cgc.c src\code_generator\r_cg_cgc_user.c src\code_generator\r_cg_dac.c src\code_generator\r_cg_dac_user.c src\code_generator\r_cg_it.c src\code_generator\r_cg_it_user.c src\code_generator\r_cg_port.c src\code_generator\r_cg_port_user.c src\code_generator\r_cg_serial.c src\code_generator\r_cg_serial_user.c src\code_generator\r_cg_timer.c src\code_generator\r_cg_timer_user.c src\code_generator\r_main.c src\code_generator\r_systeminit.c src\sample\r_demo_sample.c src\sample\r_s2_decode.c src\sample\r_s2_encode.c src\sample\r_s2_peripheral_if.c src\tfat_mmc_if\r_tfat_drv_if.c src\glyph\Drivers\ST7579_LCD.c src\glyph\fonts\bitmap_font.c src\glyph\fonts\font_8x8.c src\glyph\fonts\font_8x16.c src\glyph\fonts\font_helvr10.c src\glyph\fonts\font_logos.c src\glyph\fonts\font_winfreesystem14x16.c src\glyph\fonts\font_x5x7.c src\glyph\fonts\font_x6x13.c src\glyph\glyph.c src\glyph\glyph_register.c src\glyph\lcd.c src\glyph\RDKRL78_spi.c lib\mmc_driver\com\r_mtl_com.c lib\mmc_driver\com\r_mtl_endi.c lib\mmc_driver\com\r_mtl_mem.c lib\mmc_driver\com\r_mtl_str.c lib\mmc_driver\com\r_mtl_tim.c lib\mmc_driver\mmc\r_mmc_io.c lib\mmc_driver\mmc\r_mmc_mmc.c lib\mmc_driver\mmc\r_mmc_sub.c lib\mmc_driver\mmc\r_mmc_usr.c lib\mmc_driver\mmc\rl78\r_mmc_csi.c -cpu=S3 -obj_path=DefaultBuild -dev=E:\tools\micom\Renesas\CS+\CC\Device\RL78\Devicefile\DR5F104PJ.DVF -c -g -g_line -I lib\tfat\lib -I lib\s2\lib -I lib\mmc_driver\mmc\rl78\rl78g14_csi_ccrl -I lib\mmc_driver\mmc -I lib\mmc_driver\com\rl78_32MHz_CCRL -I lib\mmc_driver\com\rl78_24MHz_CCRL -I lib\mmc_driver\com\rl78_20MHz_CCRL -I lib\mmc_driver\com -I src\glyph -I src\glyph\Drivers -I src\tfat_mmc_if -I src\sample -I src\code_generator -I .\ -preinclude=iodefine.h -D YRDKRL78G14 -memory_model=medium -asm_path=DefaultBuild -msg_lang=japanese
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\ccrl.exe cstart.asm stkinit.asm lib\s2\lib\adpcm_decoder_rl78_ccrl.asm lib\s2\lib\adpcm_encoder_rl78_ccrl.asm lib\s2\lib\adpcm_table_rl78_ccrl.asm -cpu=S3 -obj_path=DefaultBuild -dev=E:\tools\micom\Renesas\CS+\CC\Device\RL78\Devicefile\DR5F104PJ.DVF -c -g -msg_lang=japanese
E:\tools\micom\Renesas\CS+\CC\CC-RL\V1.02.00\Bin\rlink.exe -subcommand=DefaultBuild\S2_sample_RL78G14.clnk
pause

(5) 一度リビルドする(そうしないとリンクコマンドファイル(例:DefaultBuild\S2_sample_RL78G14.clnk)が生成されない)




(6) バッチファイル(例:DefaultBuild\S2_sample_RL78G14.bat)を実行する



以上です。

  • NoMay様。

    はじめまして、Sakiと申します。

    質問させてください。
    .clnkファイルもCS+外で作れますでしょうか?

    バージョン管理ツールで管理されているプロジェクト(ソースコード)を持ってきて、自動でビルドを行いたいのですが、
    .clnkファイルはビルド後のオブジェクトファイルということで、バージョン管理を行っておりません。
    もしできれば、clnkファイルもCS+外から自動で生成したいと考えておりまして、質問させていただきました。

    ご存知であれば、ご教授いただけたらと思います。

    よろしくお願いいたします。

  • Sakiさん、こんにちは、NoMaYです。

    文面が少し微妙だと思いましたので確認させて欲しいです。「.clnkファイルもCS+外で作れますでしょうか?」ということですが、今回の方法は、バッチファイルで実行させるコマンドラインをCS+内のメニュー操作で得るようになっていて、CS+外で作っている訳ではないです。この質問の意味は「一度もビルド操作を実行しなくても.clnkファイルを作れますか?」ということですよね?

    それは出来ないようです。(実はCS+ V6.00.00はまだインストールしてなくてV5.00.00までの話になってしまいますが。) ただ、今回の方法でも、バッチファイルで実行させるコマンドラインを得るのに結局CS+を起動してメニュー操作で得ている訳ですので、.clnkファイルを得る為だけにビルド完了まで待つのは正直なところイライラしますが、操作の流れというか、そういう観点では、そうやって得られた.clnkファイルをバージョン管理ツールで登録する、というので良さそうに思うのです。

    でも、チェックイン作業/コミット作業の省力化という点では、DefaultBuildフォルダに生成されるファイルでは少し不便かも知れません。それで、思ったのですが、CS+のプロジェクト設定で、ビルド後に実行するコマンド(あるいはリンク後に実行するコマンドでも良いですが)として、DefaultBuildフォルダの.clnkファイルを親フォルダにコピーするcopyコマンドを記述するのはどうでしょうか?(あるいはfcコマンドと組み合わせて以前に親フォルダにコピーした.clnkファイルと違いが生じた時だけDefaultBuildフォルダの.clnkファイルを親フォルダにコピーするということも出来ます。)

    あと、自動でビルドしたい場合の小技として、CS+のコマンドラインモードを使う手もあります。CS+ for CCのヘルプでは「2.12 CS+をコマンドラインで操作する」に詳細な説明があります。MAKEがメイクファイルを読み込んでコンパイラやリンカを起動してビルドする、というのと対比させれば、コマンドラインモードのCS+がmtpjファイルを読み込んでコンパイラやリンカを起動してビルドする、という表現になるかと思います。

    2.12 CS+をコマンドラインで操作する - CS+ for CC V5.00.00オンラインヘルプ
    tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V5.00.00/CS+.chm/po-ProjectOperation.chm/Output/po_function_command.html

    2.12 CS+をコマンドラインで操作する - CS+ for CC V6.00.00オンラインヘルプ
    tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V6.00.00/CS+.chm/po-ProjectOperation.chm/Output/po_function_command.html

  • NoMay様。

    ご返信ありがとうございます。
    私の説明不足の中、読み取っていただき、ありがとうございます。

    コマンドラインモードは、存じておりませんでした。
    1. clnkファイルのコピー→これを使ってコマンドライン上でビルド
    2. CS+をコマンドラインモードでビルドする
    どちらかでやってみたいと思います。

    ご教授いただき、ありがとうございました。