自動で特定のファイルだけ最適化を無効にしてビルドする方法

環境はCS+ for CC V8.03.00、CC-RXコンパイラV3.02.00です。

手動でならば個別コンパイル・オプションを変更して特定のファイルだけ最適化レベル0に設定後ビルドすれば表題の目的は達成できるのですが、それを自動で行う手法はありますでしょうか?

できればpythonコンソールを使う方向ですと助かります。

Parents
  • 自動と言うのは、Pythonだけで、 特定のファイルに対して個別コンパイルオプションをONにして最適化レベルを0にする、というイメージでしょうか?
  • その通りです。
    最終的には、テストをする際にデバッグツールで特定のファイルをアセンブラで見たときに最適化されていない処理内容としたいです。
    本来は全ファイルを一気に最適化無効にすれば良いのですが、こちらのプログラムではセクションアドレスが溢れてしまうエラーでビルドができなかったので個別で無効にするという方法をとっています。
    諸事情で個別に無効にする動作を手動ではなくpythonコンソールなどを利用して自動で行いたく、模索している状況です。
    宜しくお願い致します。
Reply
  • その通りです。
    最終的には、テストをする際にデバッグツールで特定のファイルをアセンブラで見たときに最適化されていない処理内容としたいです。
    本来は全ファイルを一気に最適化無効にすれば良いのですが、こちらのプログラムではセクションアドレスが溢れてしまうエラーでビルドができなかったので個別で無効にするという方法をとっています。
    諸事情で個別に無効にする動作を手動ではなくpythonコンソールなどを利用して自動で行いたく、模索している状況です。
    宜しくお願い致します。
Children
  • 最適化レベル0のプロジェクトAと、最適化レベルMAXのプロジェクトBに分け、pythonでうまくソースをAB振り分け、最後にリンクするというのはどうですかね?実現可能性までは見てないのですが。
  • そこまで考えるなら、make 使った方がよいかも。そして、CS+はエディタ&デバッガとしてのみ使用。

    1.CS+で編集・保存 → 2.コマンドプロンプトでmake → 3.CS+上でターゲットへのダウンロード~デバッグ・・・筋は一応つながっているが、ちゃんと動くのだろうか
  • 先ほど頂いたアドバイスを参考に、現在「個別コンパイル・オプションを変更して特定のファイルだけ最適化レベル0に設定後ビルド」した際のコマンドをビルド・オプション一覧で取得し「個別コンパイル・オプションの設定状況」のコマンドだけ「コンパイル後に実行するコマンド」して実行しようとしているのですが、
    -output=obj -obj_path=FOLDER1 -Xcref=FOLDER1
    としたときに
    「E0511104:The output folder "~.obj" specified by the "-output" option is not found.」
    「E0511104:The output folder "~.cref" specified by the "-xcref" option is not found.」
    というエラーでうまく動かない状況です。

    新しいアドバイスとしてmakeを使うとのことですが、できるものなのでしょうか、、、
  • フォルダ名のところ、" と " でくくっていないとか、出力先が存在しないとかでは

     

    makefileつくって、make -f makefile とコマンドを呼び出す、でもよさそうですが。

  • フォルダ名で空白があるものは""でくくっています。

    先ほど一部間違えており
    -output=obj -obj_path=FOLDER1\main.obj -Xcref=FOLDER1\main.cref
    でした。
    またエラーもE0511104の前に
    E0511134:Input file "SRC\COMMON\main.c" is not found.
    というエラーが出ていました。

    CS+でmakefileを作るということをやったことが無く調べても公式ではサポートされていない手法しかないのですが、そういった手法のことを指していますでしょうか?
  • make の件は、PowerUser さんの「プロジェクトA,Bを振り分けて・・・」に対する一案で、Linuxなどでmakeを使った事のある人向けです。
    make はCS+とは全く関係なく、「CS+上ではビルドを行わない」「コマンドで一つずつコンパイル~リンクする代りにmakeを使う」とのアイデアです。
  • 一応自分も一通りのOSや言語は使ったことがあるのですがまだまだ初心者で深いことまでは理解できておらず、もしかしたら間違えているかもしれませんが、CS+で行われているビルドをmakeで再現する際にどうやってmakefileを用意するかというところが重要になってくる気がします。
    逆にmakefileさえ作れればCS+でビルドするのと同じ結果が得られるという理解で合っていますでしょうか?

    ちなみに最初のアドバイスのほうですが、コマンドを実行する階層を間違えていたようで、修正したらコマンドは通りました。
    一応これで特定のファイルだけ最適化レベル0でコンパイルした状態でリンクを実行させることができたので、デバッグツールで最適化されていないアセンブラを確認することができました。
    makeする手法がうまくいかなかった場合は、「コンパイル後に実行するコマンド」に事前に.batファイルを指定しておき、ビルド前にpythonでコマンドを生成して.batとして出力し、ビルドを実行するという手法となりそうです。
  • すみません、そこまで詳しくないため断言できませんが、makefile が適切であれば、大丈夫だと思います。
    CS+のビルドで使っているプログラムも、元をたどれば「ccrx.exe」や「rlink.exe」等ですので。

    ※ make は、「make が好き」「makefile なら慣れている」と行った方々向けで、それ以外の方にはお勧めしません。
  • いえいえ、大変参考になります。

    自分もmakefileの中身を一から記述した経験はほとんどなく、makeを使う手法は敷居が高いかもしれません、、、
  • pythonでbatファイルを作らせるのではなく、batファイルをプロジェクトに追加して、CS+上で編集させる方法はいかがでしょうか?
    CS+だけで管理ができるので、その方がメリットが大きいと思います。