バックグラウンド
MATLAB で次の単純な関数をコンパイルするとします。
function foo(path_to_m_file)
disp([' Running ' path_to_m_file])
run(path_to_m_file);
end
この関数は、 .mfoo
ファイルへのパスを取得し、それを実行しようとします。
ただし、実際foo
にコンパイルして実行しようとすると、次のようになります。
./run_foo.sh $path_to_run_time $path_to_m_file
ここpath_to_m_file
で、次のようなステートメントを含む単純な.mファイルです。
a = 2;
次のエラーが表示されます。
Error using ==> run
MATLAB:run:FileNotFound
ただし、それが正しいパスをfoo
取得することはわかっています。たとえば、行を次の2行に置き換えてみるとrun
foo
fID = fopen(conf_file, 'rt');
first_line = textscan(fID, '%s', Inf, 'Delimiter', '\n');
foo
ファイルの対応する行を読み取り.m
ます。したがって、.m
ファイルはそこにあり、MATLAB エンジンはそれを「見る」ことができます。eval
実際、 で読み取った文字列でも実行できtextscan
ます。
だから私の質問は:
上記のエラーが表示されるのはなぜですか? ファイルを
foo
実行しないのはなぜですか?.m
更新:この質問に対する回答と思われるものについては、以下の @strictlyrude27 の回答を参照してください。
上記がうまくいかない場合。元の関数をコンパイルした後に変更された可能性のある.mファイルを実行するために MATLAB でコンパイルされた関数を取得する方法はありますか?
私の2番目の質問の動機:
.m
プロジェクト全体を再コンパイルすることなく、プロジェクトの一部であるファイルを「更新」できるようにしたいと考えています。これについてのアイデアは大歓迎です。