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 回答
0

你在使用源代码控制吗?如果是这样,那么您应该能够让它在结帐期间自动将修订号(和/或当前日期和时间)插入您的源代码中。

如果您将其插入某个位置(例如在sprintf语句的输出中),那么您的代码应该能够报告其修订号。

最后,仅从刚刚签出的代码构建。

于 2013-05-17T20:59:36.820 回答