CubeSuite+ で変更したファイル、影響のあるファイルのみをコンパイルしたい

CubeSuite+ を使って、RX63Tの開発を行っております。

「ビルド・プロジェクト」を行うと、全ファイルがコンパイルされてしまい、非常に時間がかかります。

変更したファイル、影響のあるファイルのみをコンパイルしたいのですが、いい方法があれば教えてください。

  • こんにちは。

    プロジェクトを新規作成し、ビルドを行っても同様の現象が毎回発生するのでしょうか?
  • わわいです
    こういうときのあるあるネタなのが、、
    ・PCの時刻設定が狂っている
     時間あってるけどなあ、、とよく見ると年が違っていたり
    ・ソースファイルの更新日時がとんでもない日付になっている
     2900年とか1970年とか
    ・PCの電池がなくなってカレンダが狂っている
     ネットが繋がるとNTPで合ってしまうのでなかなか気づけない

    まー、基本に戻ってここらへんをチェックしてみましょう
    • 使用されている CubeSuite+ で新規プロジェクトを作成し同様の問題が確認されるのであればそのプロジェクトを公開し、他者にも確認してもらう
    • ルネサスが CubeSuite+ 用に公開されているサンプルコードで同様の問題が確認されるのであればそのサンプルコードを報告し、他者にも確認してもらう

    ↑のどちらかが現実的かと思います。

  • バグ製作所さん、こんにちは。NoMaYです。

    怪しいインクルードファイルを効率良く探す手順を考えてみました。

    (1)CubeSuite+の設定を以下に変更する
      [一括ビルドを行う] を [いいえ] に変更
      [インクルード・ファイルが存在しないソースの扱い] を [再コンパイル/アセンブルしない] に変更

    (2-1)以下のコメント1行だけのcheckscan.cを作成して問題のプロジェクトに追加する
    // check include scan process

    (2-2)[ビルド]→[依存関係の更新]を実行する
      念の為

    (2-3)[ビルド]→[ビルドプロジェクト]を実行する
      プロジェクトにcheckscan.cを追加したばかりなのでcheckscan.cは必ずコンパイルされる

    (2-3)[ビルド]→[ビルドプロジェクト]を再度実行する
      何もインクルードしていないcheckscan.cを全く変更していないのでcheckscan.cは絶対にコンパイルされない筈
      もしもcheckscan.cがコンパイルされるようであれば今までの話とは根本的に違うところで何かがおかしい

    (3-1)checkscan.cにプロジェクトの全インクルード行を追加する(全インクルード行を得る方法は後述)
      例
    // check include scan process
    #include "platform.h"
    #include "platform.h"
    #include "r_usb_basic_if.h"
    #include "r_usb_pcdc_apl_config.h"
    #include    "r_usb_pcdc_apl.h"
    #include <string.h>
    #include "r_usb_basic_if.h"
    #include "r_usb_pcdc_if.h"
    #include "r_usb_pcdc_apl_config.h"
    #include "r_usb_rsk_lowpower.h"

    (3-2)[ビルド]→[依存関係の更新]を実行する
      念の為

    (3-3)[ビルド]→[ビルドプロジェクト]を実行する
      checkscan.cを変更したばかりなのでcheckscan.cは必ずコンパイルされる

    (3-4)[ビルド]→[ビルドプロジェクト]を再度実行する
      インクルードファイルもcheckscan.cも全く変更していないのでcheckscan.cはコンパイルされない筈
      しかし今回はcheckscan.cがコンパイルされる筈 (もしもコンパイルされなければ想定外なので作業を中止)

    (4)インクルード行を半分に減らして[ビルド]→[ビルドプロジェクト]を同様に2回実行する
      (a) 2回目の[ビルドプロジェクト]でcheckscan.cがコンパイルされれば、残っているインクルードファイルが怪しい
      (b) 2回目の[ビルドプロジェクト]でcheckscan.cがコンパイルされなければ、削ったインクルードファイルが怪しい

    (5)このようんして絞り込んでいけば怪しいインクルードファイルを効率良く探せる筈

    プロジェクトの全インクルード行を得る方法ですが、普段使っているエディタで以下の正規表現でgrepすれば良いと思います。CubeSuite+でも以下の画面コピーのように一括検索すれば得られます。(CubeSuite+ V2.01.00のヘルプが残っていたので見てみたのですが、正規表現による一括検索はCubeSuite+ V2.01.00でも出来るようでした。)

    #.*include.*["<].*[">]




  • こんにちは。NoMaYです。

    本件がきっかけではないかと思うのですが、以下のFAQが追加されていました。少し補足しますと、CS+では依存関係を調べる時に#if~#else~#endif等を見てくれないので、このような話が起きます。(#if~#else~#endif等により除外された#includeによるインクルードファイルも含めてしまう、、、)

    support.renesas.com/.../115009581787-FAQ-3000161-インクルードファイルの見つからないソースの再コンパイルの抑止方法-CS-

    Q: 質問

    ビルド自体はできますが、依存関係の解決で見つからないファイルはいつもファイルの変更有とCS+の
    環境は判断するようで、ビルドにも関わらず、不必要な再コンパイルが常に走ってしまっています。
    再コンパイルを抑止する方法はありますか。

    A: 回答

    CS+のビルド・ツールプロパティの

    [共通オプション]タブ->[ビルド方法]-> [インクルード・ファイルが見つからないソースの扱い]を
    「再コンパイル/アセンブルしない」

    に変更してください。
  • いろいろこちらで試してみたところ、下記の設定で変更ファイルのみコンパイルされるようになりました。
      -一括ビルドを行う: いいえ
      -インクルードファイルが存在しないファイルの扱い: 再コンパイル/アセンブルしない
      -外部変数アクセス最適化を行う: いいえ

    参考になるご意見いただき、どうもありがとうございました。
  • こちらでいろいろ試したところ、下記の設定で変更したファイルのみコンパイルすることができました。
     -一括ビルド: いいえ
     -インクルードファイルが存在しないファイル: 再コンパイル/アセンブルしない
     -外部変数アクセス最適化する: いいえ

    参考になるご意見をいただき、どうもありがとうございました。
  • バグ製作所さん、こんにちは。NoMaYです。

    所望の動作になったようですので良かったです。この[外部変数アクセス最適化を行う]というのは、以前の別スレッドの「ビルドが2回繰り返される」件でも関係していたオプションのことですね。ちなみに、[一括ビルド]に戻しても所望の動作が得られるのであれば、先日のじまさんのリプライのリンク先のオンラインヘルプに書かれていたようにファイル毎にコンパイラを起動する時間の無駄が無くなってビルドが速くなる筈ですので、そうしてしまって良いと思います。(以下の補足のように色々見えて来たように思いますので。)

    [追記] 2017/07/20 01:07

    すみません。後の投稿でも書いたのですが、このリプライで書き忘れたことがありました。戻した直後の1回目の[ビルド]→[ビルドプロジェクト]の時は、CS+が「何かしらコンパイルオプションが変更されたので兎にも角にも全ファイルをコンパイルし直さなければならない」と判断するようです。なので、2回目(及びそれ以降)の[ビルド]→[ビルドプロジェクト]でのCS+の挙動が変わるかどうかということになります。

    [補足]

    試しに、私も手元のプロジェクトの設定を変更して、以下の画面コピーの通り再現させてみました。CS+(というかコンパイラ)のオンラインヘルプも読んでみましたが、察するに、このオプションで[はい(モジュール間で最適化)(-map)]を指定すると「コンパイル・リンクが2回ずつ実施される」上に「2回目のコンパイルでは全ファイルがコンパイルされる」そういうものなのだろうと思われます。

    [はい(モジュール間で最適化)(-map)]を指定した場合:
    2回行われるビルドの1回目は変更ファイルのみコンパイルされるが2回目は全ファイルがコンパイルされる


    -map - CS+ V5.00 オンラインヘルプ > コンパイラ編 > コマンド・リファレンス > オプション > コンパイル・オプション > 最適化オプション


    ここでは他に、[はい(モジュール内で最適化)(-smap)]を指定することも出来るのですが、その場合は以下の画面コピーの通り普通にコンパイル・リンクが1回行われるだけでした。

    [はい(モジュール内で最適化)(-smap)]を指定した場合:
    ビルドは1回行われるだけであり変更ファイルのみコンパイルされる


    -smap - CS+ V5.00 オンラインヘルプ > コンパイラ編 > コマンド・リファレンス > オプション > コンパイル・オプション > 最適化オプション


    なお、[最適化レベル]の設定を[Max(-optimize=max)]にすると自動的に[外部変数アクセス最適化を行う]の設定が[はい(モジュール間で最適化)(-map)]になりますが、併せて以下の画面コピーのようにリンカの設定も変更されました。そして、1回目のビルドではBLSファイルが生成されていました。





  • NoMaYさん

    いろいろ調査ありがとうございます。

    [一括ビルド]に戻してコンパイルを行ってみましたが、全ファイルがコンパイルされてしまいました。
    下記の3点セットが必要みたいです。
     -一括ビルド: いいえ
     -インクルードファイルが存在しないファイル: 再コンパイル/アセンブルしない
     -外部変数アクセス最適化する: いいえ
  • バグ製作所さん、こんにちは。

    すみません。1つ書き忘れたのですが、戻した直後の1回目の[ビルド]→[ビルドプロジェクト]の時は、CS+が「何かしらコンパイルオプションが変更されたので兎にも角にも全ファイルをコンパイルし直さなければならない」と判断するようです。なので、2回目(及びそれ以降)の[ビルド]→[ビルドプロジェクト]でのCS+の挙動はどうでしょうか? (実は正直に言うと、リプライしてから暫く経って気付いたのですが、最初のリプライのビルド方法を変更した直後においても同じ話があったのですが、そちらも書き忘れてしまっていました。)

    2回目(及びそれ以降)でも全ファイルがコンパイルされるのであれば、ちょっと気になりますが、私とバグ製作所さんでCS+(というかCubeSuite+)のバージョンが異なるという話もあったりしますので、3点セットに腰を落ち着けて作業を進められた方が良さそうですね。