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

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

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

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

  • 自動と言うのは、Pythonだけで、 特定のファイルに対して個別コンパイルオプションをONにして最適化レベルを0にする、というイメージでしょうか?
  • その通りです。
    最終的には、テストをする際にデバッグツールで特定のファイルをアセンブラで見たときに最適化されていない処理内容としたいです。
    本来は全ファイルを一気に最適化無効にすれば良いのですが、こちらのプログラムではセクションアドレスが溢れてしまうエラーでビルドができなかったので個別で無効にするという方法をとっています。
    諸事情で個別に無効にする動作を手動ではなくpythonコンソールなどを利用して自動で行いたく、模索している状況です。
    宜しくお願い致します。
  • プロジェクトツリーの「CC-RX(ビルドツール)」より、「共通オプション」タブの「その他-ビルド前に実行するコマンド」で、事前に対象のCソースだけ最適化レベル0でコンパイルさせてみるのは、いかがでしょう?
  • 確かにその手は考えていませんでしたが、そうなると自分のやりたい自動化としては指定のファイルに対して最適化レベルを0でコンパイルするような「ビルド前に実行するコマンド」を生成してビルドツールのオプションに設定するところまでを自動で行う必要があります。
    また、以前試したこととして、クリーンした後に全体を最適化レベル0にした状態で指定ファイルだけをビルドし、再度全体を最適化レベル2にしてビルドすると最適化レベル0でビルドしたものが上書きされてしまうということが発生したので、ご提案して頂いた手法もうまくいかないかもしれません。
  • コンパイル済みファイルの最適化レベルの情報が、今回のビルドでの指定と異なるため、「ビルド対象」に含まれる、ということでしょうか。
    それであれば、ビルド処理の「コンパイル」と「リンク」の間で、最適化0コンパイルを実行させれば良いかもしれません。
    共通オプションではなく、コンパイルオプションの「コンパイル後に実行するコマンド」か、リンクオプションの「リンク前に実行するコマンド」が該当するのではないでしょうか。
  • 最適化レベル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を作るということをやったことが無く調べても公式ではサポートされていない手法しかないのですが、そういった手法のことを指していますでしょうか?