e2 studioでC++ソースでのINDEXER/CODANの調子が悪そうなので調べてみようと思います

こんにちは、NoMaYです。

昨日、別スレッドをきっかけに、最近のe2 studioでは(実は結構昔から?)プロジェクトウィザードでGNURXやCC-RXのC++プロジェクトを作成する場合にもRXスマートコンフィグレータを選択可能になっていることを知りました。同時に、C++ソースに対してはCソースよりもe2 studioのINDEXER/CODANの調子が悪そうなことも知りました。そこで、ちょっと調べてみようと思いました。出来れば改善策の落としどころも模索してみたいです。(でも、本来は、ルネサスさんに直して貰うべきものかな、とは思いますが。)

まずは、バグ一覧やFAQに何か記載されているか調べてみましたが、特にはありませんでした。

e² studio 2021-04 バグ一覧 (includeの文字列を検索)
www2.renesas.eu/_custom/software/ree_eclipse/e2studio8/docs/releasenotes/2021_04/openissues.htm

Google検索: "e2 studio" "C++" include site:ja-support.renesas.com/knowledgeBase
www.google.com/search?q=%22e2+studio%22+%22C%2B%2B%22+include+site%3Aja-support.renesas.com%2FknowledgeBase
www.google.com/search?q=%22e2+studio%22+%22C%2B%2B%22+include+site%3Aen-support.renesas.com%2FknowledgeBase

[関連スレッド]
e2 studioでビルドエラーが無いのに編集エラーが表示された時に試すと良いかも(workarounds for INDEXER/CODAN troubles)
japan.renesasrulz.com/cafe_rene/f/forum21/4564/e2-studio-workarounds-for-indexer-codan-troubles

続く。

以下、e2 studioでC++ソースでINDEXER/CODANが誤動作している例の画面コピーです。

現状はC++標準ヘッダファイルのインクルードパスがe2 studioに自動認識されていない


本来は以下のようにC++標準ヘッダファイルのインクルードパスがe2 studioに自動認識されているべき

 

Parents
  • こんにちは、NoMaYです。

    e2 studio(というか元となっているEclipse)では、とあるオプションを指定してGCCを呼び出し、GCCからインクルードパスや組み込みマクロ定義の情報を自動的に取得するようになっています。(推測ですけど、VSCodeも同じメカニズムではないか、と思っているのです。) その時のオプションや取得した情報は、e2 studioの以下の画面コピーの設定を有効にすることで確認することが出来ます。

    実際に確認してみて気になったのですが、Cソースに対するコマンド呼び出しとC++ソースに対するコマンド呼び出しが以下のようになっていましたが、MinGWでの知見から推測すると、本来は以下のようになっているべきだと思うのです。

    e2 studioがGNURXから情報を取得する際に実際に発行しているコマンド (取得された情報ともども以下のzipに固めました。)

    rx_e2studio_cpp_20210716.zip

    Cソース: (正直なところ -std=gnu99 の出所が分かりません)
    rx-elf-gcc -O0 -ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -Wstack-usage=100 -g2 -mcpu=rx72t -misa=v3 -mlittle-endian-data -std=gnu99 -E -P -v -dD C:/Renesas/Work/workspaces/workspace_e2v202104/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c

    C++ソース:
    rx-elf-gcc -O0 -ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -Wstack-usage=100 -g2 -mcpu=rx72t -misa=v3 -mlittle-endian-data -std=c++1y -E -P -v -dD C:/Renesas/Work/workspaces/workspace_e2v202104/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c

    cc1.exe: warning: command line option '-std=c++14' is valid for C++/ObjC++ but not for C

     
    MinGWでの知見から推測して本来そうあるべきだと思われるコマンド

    Cソース: 実際の内容と同じ (もっとも、正確には -std=gnu99 の出所が分かりません、けれども)
    rx-elf-gcc -O0 -ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -Wstack-usage=100 -g2 -mcpu=rx72t -misa=v3 -mlittle-endian-data -std=gnu99 -E -P -v -dD C:/Renesas/Work/workspaces/workspace_e2v202104/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.c

    C++ソース: 赤文字の箇所のようになっているべきな気がするのです (rx-elf-gcc ⇒ rx-elf-g++、 spec.c ⇒ spec.cpp)
    rx-elf-g++ -O0 -ffunction-sections -fdata-sections -fdiagnostics-parseable-fixits -Wstack-usage=100 -g2 -mcpu=rx72t -misa=v3 -mlittle-endian-data -std=c++1y -E -P -v -dD C:/Renesas/Work/workspaces/workspace_e2v202104/.metadata/.plugins/org.eclipse.cdt.managedbuilder.core/spec.cpp

     
    続く。

    以下、e2 studioの画面コピーです。

    e2 studioがGNURXからインクルードパスや組み込みマクロ定義の情報を自動的に取得した内容を確認したい時の設定


    Cソースに対して得られた情報




    C++ソースに対して得られた情報



     

  • CとC++の設定が共通なので、コマンドを呼び分けるにはファイル単位でオプションを設定してやる必要があります。面倒くさいですが。
    LLVMのC++プロジェクトだとCとC++用の設定を別々に与えられ、かつコマンドも呼び分けるようになっていますが、それがあるべき姿なのかな、と思います。

Reply
  • CとC++の設定が共通なので、コマンドを呼び分けるにはファイル単位でオプションを設定してやる必要があります。面倒くさいですが。
    LLVMのC++プロジェクトだとCとC++用の設定を別々に与えられ、かつコマンドも呼び分けるようになっていますが、それがあるべき姿なのかな、と思います。

Children
No Data