Linuxで自動グレーダープログラムを書いています。MATLAB で書かれた採点者が何人かいるので、それらをまとめて、学生にプログラムを実行させて課題を出させ、課題を選択させたいと考えています。私は C++ メイン プログラムを使用しています。このプログラムには、mcc でコンパイルされた MATLAB ライブラリがリンクされています。
具体的には、私のプログラムは、さまざまな matlab プログラムの名前とその他の情報の構成ファイルを読み取ります。次に、その情報を使用して、学生に選択肢を提示します。したがって、割り当てが変更、追加、または削除された場合、構成ファイルを変更するだけで済みます。
次に、プログラムは mcc でコンパイルされた正しい matlab ライブラリを呼び出すという考え方です。ただし、これは、グレーダーが変更された場合、ライブラリを再コンパイルする必要があることを意味します。さらに悪いことに、グレーダーが追加または削除された場合、プログラム全体を再コンパイルする必要があります。したがって、グレーダーの m ファイルを直接呼び出す、単純で変更されない 1 つの matlab ライブラリ関数が必要です。私は現在、メインプログラムから渡された文字列に eval を使用するライブラリを持っています。
問題は、私がこれを行うと、どうやら、mcc がグレーダーの m コードをそれ自体に吸収することです。コンパイル後に grader m コードを変更しても効果はありません。これが起こらないことを望みます。Mathworks は、matlab を完全にバイパスする可能性があるため、これを行うことを望んでいない可能性があることに気付きました。それは私の意図ではなく、完全な matlab インストールを必要とするソリューションに満足しています。
私の考えられる解決策は、メイン プログラムに mex ファイルを使用するか、メイン プログラムに mcc ライブラリを呼び出してから、mex ファイルを呼び出し、適切なグレーダーを呼び出すことです。最初の解決策をためらう理由は、それを機能させるためにコードにどれだけの変更を加える必要があるかわからないからです。私のコードは C ではなく C++ です。ただし、2 番目の解決策は、より複雑で、最終的には同じ問題が発生する可能性があります。
それで、この状況について何か考えはありますか?どうすればいいですか?