1

いくつかの計算を行い、出力を生成するために .NET で呼び出される matlab プログラムがあります。

ある種の自動バージョン検出が必要です。

たとえば、プログラムを実行すると、コンパイル (ビルド) の日付が出力の横にデータベースに書き込まれます。(コンパイルされていないコードを実行するとどうなるかは気にしません)

ビルドするたびにソースコードを変更して手動でこれを行う方法は知っていますが、これを自動的に行う方法を探しています。

4

3 に答える 3

2

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後で使用できるように関数にインプリントされます。

于 2013-05-17T11:23:07.807 に答える
1

@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て出力として書き込むことができます。

于 2013-05-29T15:33:38.607 に答える