こんにちは、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.htmGoogle検索: "e2 studio" "C++" include site:ja-support.renesas.com/knowledgeBasewww.google.com/search?q=%22e2+studio%22+%22C%2B%2B%22+include+site%3Aja-support.renesas.com%2FknowledgeBasewww.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に自動認識されているべき
こんにちは、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++用の設定を別々に与えられ、かつコマンドも呼び分けるようになっていますが、それがあるべき姿なのかな、と思います。