e2studioでのRXコンパイルについて

イッシーと申します。

RX63Nのソフトをe2studio(V6.0)で開発していますが、
いつからかあるプロジェクトで以下の現象がおきてしまい困っています。
現象:
ヘッダファイルを編集しても、そのファイルをインクルードしているソースがコンパイルされない。

そのプロジェクトはe2studioV5.2で作成し、e2studiov6.0でインポートしました。
プロジェクト名も何度か変更しました。
toolchain:Renesasu RXC Toolchain

新規作成した別なプロジェクトではヘッダファイルを編集すると正しくコンパイルされます。
問題のプロジェクトでメニューのプロジェクトからクリーンすると全てがコンパイルされ正常です。
ソースファイルを編集するとインクルードファイルも正常に反映されます。

対処法をご存知の方がいらしたら教えてください。

  • わわいです
    その問題のプロジェクトでの、ファイルの日付、時刻を確認してみましょう。
    make というのはファイルの更新時刻を見て更新動作を行いますんで、
    ファイルの日付情報がとんでもなく狂っていたりするとそこら辺の動作がおかしくなります
  • イッシーさん、こんにちは。NoMaYと申します。

    少し調べてみたのですが、v6が生成するメイクファイルではv5が生成するメイクファイルの以下の赤字の部分が欠落していて、たぶん、makeコマンドレベルではヘッダファイルに関してメイクとしてまともに機能していない、ように思われます。(e2 studio v6がmakeコマンドを起動する前に自身で.dファイル内のヘッダファイル依存関係情報をチェックして適切に.objファイルを削除していれば、e2 studio v6のビルドシステムレベルではメイクとして機能しているかも知れない。きっと、ピンとくる人にしか分からないチンプンカンプンな文面になっているだろう、という自覚はありますが、ご容赦願います。) この後、もう少し調べてみます。

    以下はe2 studio v5が生成したメイクファイルの一例

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    # Add inputs and outputs from these tool invocations to the build variables
    C_SRCS += ¥
    ..¥r_bsp/board/rskrx64m/dbsct.c ¥
    ..¥r_bsp/board/rskrx64m/hwsetup.c ¥
    ..¥r_bsp/board/rskrx64m/lowlvl.c ¥
    ..¥r_bsp/board/rskrx64m/lowsrc.c ¥
    ..¥r_bsp/board/rskrx64m/resetprg.c ¥
    ..¥r_bsp/board/rskrx64m/sbrk.c ¥
    ..¥r_bsp/board/rskrx64m/vecttbl.c

    C_DEPS += ¥
    ./r_bsp/board/rskrx64m/dbsct.d ¥
    ./r_bsp/board/rskrx64m/hwsetup.d ¥
    ./r_bsp/board/rskrx64m/lowlvl.d ¥
    ./r_bsp/board/rskrx64m/lowsrc.d ¥
    ./r_bsp/board/rskrx64m/resetprg.d ¥
    ./r_bsp/board/rskrx64m/sbrk.d ¥
    ./r_bsp/board/rskrx64m/vecttbl.d

    OBJS += ¥
    ./r_bsp/board/rskrx64m/dbsct.obj ¥
    ./r_bsp/board/rskrx64m/hwsetup.obj ¥
    ./r_bsp/board/rskrx64m/lowlvl.obj ¥
    ./r_bsp/board/rskrx64m/lowsrc.obj ¥
    ./r_bsp/board/rskrx64m/resetprg.obj ¥
    ./r_bsp/board/rskrx64m/sbrk.obj ¥
    ./r_bsp/board/rskrx64m/vecttbl.obj


    # Each subdirectory must supply rules for building sources it contributes
    r_bsp/board/rskrx64m/%.obj: ../r_bsp/board/rskrx64m/%.c r_bsp/board/rskrx64m/c.sub
        @echo 'Scanning and building file: $<'
        @echo 'Invoking: Scanner and Compiler'
        ccrx  -MM -MP -output=dep="$(@:%.obj=%.d)" -MT="$(@:%.obj=%.obj)" -MT="$(@:%.obj=%.d)" -lang=c99   -include="C:¥Renesas¥CS_~1¥CC¥CC-RX¥V203~1.00/include","C:¥Renesas¥RX¥an_r01an2609jj0100_rx64m_apl_fit¥workspace_e2v5¥rx64m_rsk_audio¥src",以後省略
        ccrx -lang=c99 -output=obj="$(@:%.d=%.obj)"  -include="C:¥Renesas¥CS_~1¥CC¥CC-RX¥V203~1.00/include","C:¥Renesas¥RX¥an_r01an2609jj0100_rx64m_apl_fit¥workspace_e2v5¥rx64m_rsk_audio¥src",以後省略
        @echo 'Finished scanning and building: $<'
        @echo.

    以下はe2 studio v6が生成したメイクファイルの一例

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    # Add inputs and outputs from these tool invocations to the build variables
    C_SRCS += ¥
    ../r_bsp/board/rskrx64m/dbsct.c ¥
    ../r_bsp/board/rskrx64m/hwsetup.c ¥
    ../r_bsp/board/rskrx64m/lowlvl.c ¥
    ../r_bsp/board/rskrx64m/lowsrc.c ¥
    ../r_bsp/board/rskrx64m/resetprg.c ¥
    ../r_bsp/board/rskrx64m/sbrk.c ¥
    ../r_bsp/board/rskrx64m/vecttbl.c

    COMPILER_OBJS += ¥
    r_bsp/board/rskrx64m/dbsct.obj ¥
    r_bsp/board/rskrx64m/hwsetup.obj ¥
    r_bsp/board/rskrx64m/lowlvl.obj ¥
    r_bsp/board/rskrx64m/lowsrc.obj ¥
    r_bsp/board/rskrx64m/resetprg.obj ¥
    r_bsp/board/rskrx64m/sbrk.obj ¥
    r_bsp/board/rskrx64m/vecttbl.obj

    # Each subdirectory must supply rules for building sources it contributes
    r_bsp/board/rskrx64m/%.obj: ../r_bsp/board/rskrx64m/%.c r_bsp/board/rskrx64m/Compiler.sub
        @echo 'Scanning and building file: $<'
        @echo 'Invoking: Scanner and Compiler'
        ccrx -MM -MP -output=dep="$(@:%.obj=%.d)"  -MT="$(@:%.d=%.obj)"  -MT="$(@:%.obj=%.d)" -isa=rxv2 -fpu -include="E:¥tools¥micom¥Renesas¥CS+¥CC¥CC-RX¥V2.03.00¥include","C:¥Renesas¥RX¥an_r01an2609jj0100_rx64m_apl_fit¥workspace_e2v6¥rx64m_rsk_audio¥src",以後省略
        ccrx -isa=rxv2 -fpu -include="E:¥tools¥micom¥Renesas¥CS+¥CC¥CC-RX¥V2.03.00¥include","C:¥Renesas¥RX¥an_r01an2609jj0100_rx64m_apl_fit¥workspace_e2v6¥rx64m_rsk_audio¥src",以後省略
        @echo 'Finished Scanning and building: $<'
        @echo.

    [追伸]

    もとのメイクファイルだとContent Under Reviewとなってしまいましたので、少し加工しました。

    [追記] 23:06

    実は、変わっていることに気付いたと言うよりも、昔の一時期のe2 studioが生成していたものに逆戻りしてしまったような気がすると言った方が、より適切な表現だったりします。そして、初めに書いた「e2 studio v6がmakeコマンドを起動する前に自身で.dファイル内のヘッダファイル依存関係情報をチェックして適切に.objファイルを削除していれば、e2 studio v6のビルドシステムレベルではメイクとして機能しているかも知れない。」というのは、先ほど新しく思った訳では無くて、丁度その時期に嵌ったことがあってメイクファイルを調べていて思ったことの延長だったりします。

    [追記] 2017/09/19 09:36

    ちなみに、e2 studio v6でもEclipse/CDTとしてのGNUARM GCCやMinGW GCCのプロジェクトでは、以下のようにe2 studio v5で生成されていたのと同様のものが出力されていました。(紫字の部分です。)

    以下はe2 studio v6のEclipse/CDTとしてのGNUARM GCCプロジェクトで生成されたメイクファイルの一例

    ################################################################################
    # 自動生成ファイルです。 編集しないでください!
    ################################################################################

    # これらのツール呼び出しからの入力および出力をビルド変数へ追加します
    C_SRCS += ¥
    ../src/main.c

    OBJS += ¥
    ./src/main.o

    C_DEPS += ¥
    ./src/main.d


    # サブディレクトリーはすべて、それ自身がコントリビュートするソースをビルドするためのルールを提供しなければなりません
    src/%.o: ../src/%.c
        @echo 'ビルドするファイル: $<'
        @echo '呼び出し中: Cross ARM C Compiler'
        arm-none-eabi-gcc -mcpu=cortex-a9 -mthumb -O0 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections  -g3 -std=gnu11 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<"
        @echo 'ビルド完了: $<'
        @echo ' '

    以下はe2 studio v6のEclipse/CDTとしてのMinGW GCCプロジェクトで生成されたメイクファイルの一例

    ################################################################################
    # 自動生成ファイルです。 編集しないでください!
    ################################################################################

    # これらのツール呼び出しからの入力および出力をビルド変数へ追加します
    C_SRCS += ¥
    ../src/TestMinGW.c

    OBJS += ¥
    ./src/TestMinGW.o

    C_DEPS += ¥
    ./src/TestMinGW.d


    # サブディレクトリーはすべて、それ自身がコントリビュートするソースをビルドするためのルールを提供しなければなりません
    src/%.o: ../src/%.c
        @echo 'ビルドするファイル: $<'
        @echo '呼び出し中: GCC C コンパイラー'
        gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<"
        @echo 'ビルド完了: $<'
        @echo ' '

     

  • イッシーさん、こんにちは。NoMaYです。

    海外では数日前に以下のナレッジベースが追加されていたようですね。ただ、これを読んで思ったのですが、ヘッダファイルをどこに置けば依存関係スキャンが行われるか、を書かなければ片手落ちなのでは無いだろうかという気はしましたが、、、

    C Source Not Compiled Even After Modifying Header - e² studio
    en-eu.knowledgebase.renesas.com/.../C_Source_Not_Compiled_Even_After_Modifying_Header_e²_studio

    Question:
    I modified a header file which is referred from source code(s) in a project and then executed 'Build project.' However, this does not initiate compilation of the source code(s) referring the header file.

    Answer:
    This occurs because the header file is located out of dependency scan of the project. Please rebuild the project, or if you are sure of which source code(s) refers the header file, please compile the source files manually so that you can build the project. To compile the source files manually, please select the desired source file(s) in Project Explorer and then select "Build Selected File(s)" from the context menu.


    [関連リンク]

    e2 studio - Renesas Knowledgebase
    en-eu.knowledgebase.renesas.com/.../e2studio

    [追記]

    日本のFAQにも追加されていました。

    FAQ 3000214 : ヘッダファイルを修正後、プロジェクトビルドしてもコンパイルされません(e² studio)
    support.renesas.com/.../115012332367-FAQ-3000214-ヘッダファイルを修正後-プロジェクトビルドしてもコンパイルされません-e-studio-


    Q: 質問
    プロジェクト内のソースから参照されているヘッダファイルを修正しました。その後に「プロジェクトのビルド」を行ってもヘッダを参照しているソースがコンパイルがされません。

    A: 回答
    ファイルの依存関係を検索されない場所にヘッダファイルが置かれているものと思われます。御面倒ですがリビルドを実行してください。もしそのヘッダファイルを参照しているソースが明確に分かっている場合には、手動でコンパイルした後にプロジェクトビルドを行うこともできます。手動でコンパイルを行うには、プロジェクトエクスプローラでソースファイルを選択(複数選択可)してコンテクストメニューの「選択したファイルのビルド」を呼び出してください。


    [関連リンク]

    統合開発環境(e² studio) - Renesas FAQ
    support.renesas.com/.../201929778-統合開発環境-e-studio-

  • イッシーさん、こんにちは。NoMaYです。

    調べてみたところ、おそらく以下のようなことでは無いだろうか、という気がします。(自力での対処法は考え中です。)

    (1) e2 studio v5(やEclipse/CDTも?)ではメイク機能はe2 studio自身とmake.exeによる2段構えになっていた
    (2) もしe2 studio自身のメイク機能が仕様/制限/不具合により意図通りでなくてもmake.exeが対処してくれた
    (3) 具体的にはe2 studio自身のメイク機能ではプロジェクトフォルダ以外にあるヘッダファイルはケアされない
    (4) また、あくまで例えばの話として、インクルード階層数やヘッダファイル名の制限があるかも知れない
    (5) 更に、あくまで可能性の話として、インデクサーという機構が関与していて何らかの不具合があるかも知れない
    (6) しかし、(3)~(5)で見落とされたヘッダファイルの依存関係があってもe2 studio v5ではmake.exeが対処出来た

    (7) ところが、e2 studio v6ではe2 studioが生成するメイクファイルに不備がありmake.exeが対処出来なくなった

    解決法ですが、ルネサス社にe2 studio v6を修正して頂くのが、一番だと思います。ただ、ナレッジベースやFAQの回答があのようになっていますので、不具合として扱って貰えるかどうか微妙かも知れません。一応、e2 studio(というかEclipse/CDT)では、e2 studioがメイクファイルを生成してから実際にmake.exeが実行されるまでの間に、生成されたメイクファイルに小細工する余地がありますので、そこで何とかする方法が無いか考え中です。

  • イッシーです。
    わいわいさん回答ありがとうございます。
    ヘッダファイルのプロパティを見ると作成日時、更新日時、アクセス日時とも正常でした。
    ただ、ヘッダファイルを編集しプロジェクトのコンパイルを実行するとファイルのプロパティの最終変更日時は
    コンパイルした後に更新されました。

    NoMaYさん貴重な資料・情報を頂きありがとうございます。
    大変参考になりました。
    コンパイラの不具合かも知れないのでルネサスCSAに質問してみます。
    回答があったらここで報告します。
  • イッシーです。
    NoMaYさん色々と調査して頂きありがとうございました。

    お騒がせしました。
    原因は不明ですが問題は解決しました。
    プロジェクトを新規に作成したところ、
    ヘッダファイルを編集してもコンパイルしない現象はなくなり、問題もありませんでした。
    新規のプロジェクトと問題のプロジェクトのソースコードはまったく同じですが?!

    原因はたぶんe2studioV6にした時、V5.2で作成したプロジェクトをインポートしたのですが
    そのときの手順が間違えたのではないかと想像し、自分で勝手に解決したことにしました。

    コメント頂いた方々に感謝します。

    ルネサスにも問い合わせしましたが、NoMaYさんから紹介されたFAQを紹介されました。
    FAQ 3000214 : ヘッダファイルを修正後、プロジェクトビルドしてもコンパイルされません
    support.renesas.com/.../115012332367-FAQ-3000214

    ルネサスからの回答の一部をコピーします。
    >FAQの文章で「ファイルの依存関係を検索されない場所」とはどこでしょうか?
    プロジェクトフォルダの中であれば依存関係は検索されます。
    プロジェクトフォルダの外にある場合、toolchainと、e2 studioのバージョンによって
    検索範囲が異なります。e2 studio V6.0とCC-RXの組み合わせでは
    プロジェクトフォルダ外のヘッダファイルは依存関係に含まれません。
    ※今後のバージョンでの改善を検討中です(リリース時期はまだ未定です)。

    ありがとうございました。
  • こんにちは。NoMaYです。昔の投稿の自己フォローです。

    別スレッド「CS+でMakefileを生成する方法(ちょー初歩的ですが・・)」で気になったので、先ほどe2 studio v6.2.0で確認したところ、このスレッドの私の最初のリプライで「v6が生成するメイクファイルではv5が生成するメイクファイルの以下の赤字の部分が欠落していて」と書いた部分(以下の赤字の部分)が生成されるようになっていました。

    以下はe2 studio v6.0.0が生成したメイクファイルの一例 (該当箇所が欠落していた)

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    # Add inputs and outputs from these tool invocations to the build variables
    C_SRCS += \
    ../generate/dbsct.c \
    ../generate/hwsetup.c \
    ../generate/intprg.c \
    ../generate/resetprg.c \
    ../generate/sbrk.c \
    ../generate/vecttbl.c

    COMPILER_OBJS += \
    generate/dbsct.obj \
    generate/hwsetup.obj \
    generate/intprg.obj \
    generate/resetprg.obj \
    generate/sbrk.obj \
    generate/vecttbl.obj

    # Each subdirectory must supply rules for building sources it contributes
    generate/%.obj: ../generate/%.c
        @echo 'Scanning and building file: $<'
        @echo 'Invoking: Scanner and Compiler'
        ccrx -MM -MP -output=dep="$(@:%.obj=%.d)"  -MT="$(@:%.d=%.obj)"  -MT="$(@:%.obj=%.d)" -isa=rxv1 -fpu -include="C:\Renesas\CS+\CC\CC-RX\V2.03.00\include","C:\Renesas\RX\issue_20170916\workspace_e2v600\Test1\generate" -lang=c -nomessage -debug -nologo  "$<"
        ccrx -isa=rxv1 -fpu -include="C:\Renesas\CS+\CC\CC-RX\V2.03.00\include","C:\Renesas\RX\issue_20170916\workspace_e2v600\Test1\generate" -lang=c -nomessage -output=obj -obj_path="generate" -debug -nologo "$<"
        @echo 'Finished Scanning and building: $<'
        @echo.

    以下はe2 studio v6.2.0が生成したメイクファイルの一例 (該当箇所が生成されていた)

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    # Add inputs and outputs from these tool invocations to the build variables
    C_SRCS += \
    ../generate/dbsct.c \
    ../generate/hwsetup.c \
    ../generate/intprg.c \
    ../generate/resetprg.c \
    ../generate/sbrk.c \
    ../generate/vecttbl.c

    COMPILER_OBJS += \
    generate/dbsct.obj \
    generate/hwsetup.obj \
    generate/intprg.obj \
    generate/resetprg.obj \
    generate/sbrk.obj \
    generate/vecttbl.obj

    C_DEPS += \
    generate/dbsct.d \
    generate/hwsetup.d \
    generate/intprg.d \
    generate/resetprg.d \
    generate/sbrk.d \
    generate/vecttbl.d

    # Each subdirectory must supply rules for building sources it contributes
    generate/%.obj: ../generate/%.c generate/Compiler.sub
        @echo 'Scanning and building file: $<'
        @echo 'Invoking: Scanner and Compiler'
        ccrx -MM -MP -output=dep="$(@:%.obj=%.d)"  -MT="$(@:%.d=%.obj)"  -MT="$(@:%.obj=%.d)" -isa=rxv1 -fpu -include="C:\Renesas\CS_~1\CC\CC-RX\V203~1.00\include","C:\Renesas\RX\issue_20170915\workspace_e2v620\Test1\generate" -lang=c -nomessage -debug -nologo  "$<"
        ccrx -isa=rxv1 -fpu -include="C:\Renesas\CS_~1\CC\CC-RX\V203~1.00\include","C:\Renesas\RX\issue_20170915\workspace_e2v620\Test1\generate" -lang=c -nomessage -output=obj -obj_path="generate" -debug -nologo "$<"
        @echo 'Finished Scanning and building: $<'
        @echo.

    [関連リンク]

    リリースノートを確認してみましたが、それらしい記載はありませんでした。何かのついでに挙動が変わった、というところでしょうか。

    e2 studio 6.2.0 Release Note R20UT4237EE0100 Rev.1.00 January 5th, 2018
    www.renesas.com/ja-jp/doc/products/tool/doc/012/r20ut4237ee0100-e2-620-n.pdf

    e² studio 6.1.0 Release Note R20UT4191EE0100 Rev.1.00 October 16th, 2017
    www.renesas.com/ja-jp/doc/products/tool/doc/010/r20ut4191ee0100-e2-610-n.pdf