我有一个在.NET中调用的matlab程序来进行一些计算并生成输出。
我想进行某种自动版本检测。
例如,当程序运行时,我希望将编译(构建)日期写入输出旁边的数据库。 (我不关心运行未编译代码时会发生什么)
我知道如何通过每次构建时更改源代码来手动执行此操作,但我正在寻找一种自动执行此操作的方法。
答案 0 :(得分: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
函数中供以后使用。
答案 1 :(得分: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
并将其写为输出。
答案 2 :(得分:0)
您使用的是源代码管理吗?如果是这样,那么您应该能够在结账时自动将修订号(和/或当前日期和时间)插入到您的源中。
如果您将其插入某个位置(例如在sprintf
语句的输出中),那么您的代码应该能够报告其修订号。
最后,只使用刚签出的代码构建。