いくつかの計算を行い、出力を生成するために .NET で呼び出される matlab プログラムがあります。
ある種の自動バージョン検出が必要です。
たとえば、プログラムを実行すると、コンパイル (ビルド) の日付が出力の横にデータベースに書き込まれます。(コンパイルされていないコードを実行するとどうなるかは気にしません)
ビルドするたびにソースコードを変更して手動でこれを行う方法は知っていますが、これを自動的に行う方法を探しています。
いくつかの計算を行い、出力を生成するために .NET で呼び出される matlab プログラムがあります。
ある種の自動バージョン検出が必要です。
たとえば、プログラムを実行すると、コンパイル (ビルド) の日付が出力の横にデータベースに書き込まれます。(コンパイルされていないコードを実行するとどうなるかは気にしません)
ビルドするたびにソースコードを変更して手動でこれを行う方法は知っていますが、これを自動的に行う方法を探しています。
MatLab はインタプリタ言語であることはご存知だと思いますので、コンパイル日はありません。
回避策として、これを行うことができます。プログラムに次の行を追加します。
try
CompilationDateTime = GetCompilationDateTime
catch
% GetCompilationDateTime not found
CompilationDateTime = 0 % the default compilation date/time
end
次に、この関数を使用します
function UpdateCompilationDateInCurrentDir
fh = fopen('GetCompilationDateTime.m','w');
fprintf(fh, 'function res = GetCompilationDateTime\n');
fprintf(fh, 'res = %s\n',num2str(now));
fprintf(fh, 'end\n');
fclose(fh);
end
UpdateCompilationDateInCurrentDir
そのため、アプリケーションを (手動またはビルド スクリプトから) コンパイルする直前に呼び出す必要があり、現在の日付/タイルがGetCompilationDateTime
後で使用できるように関数にインプリントされます。
@anandr に触発されて、最終的に小さな関数を思いつきました。それはまさに彼が提案したものに加えて、少し余分に行います。これを一般化するのは難しくありません。
function usedeploytooltobuildfoo
% Update the m file that contains the date and build foo
%% Specifics of this project
my_function_name = 'foo';
location_of_project = 'C:\fooproject.prj';
%% General
% Find the location of the function, this is where we will write the new timestamp function
location_of_mainfunction = which(my_function_name);
location_of_mainfunction = location_of_mainfunction(1:end-2-length(my_function_name)); %Truncate the end of the path
% Design the function that can be used to read out the timestamp
my_new_functionstring = ['function t = myTimeStamp; t=' datestr(now,'YYYYmmDDHHMM') ';'];
% Write the new timestamp function
fid = fopen([location_of_mainfunction 'myTimeStamp.m'],'w');
fprintf(fid,'%s',my_new_functionstring);
fclose(fid);
% Now execute the build
deploytool('-build',location_of_project)
これで、コードを呼び出しmyTimeStamp
て出力として書き込むことができます。