获取编译日期作为输出

时间:2013-05-17 08:59:48

标签: .net matlab version-control compilation

我有一个在.NET中调用的matlab程序来进行一些计算并生成输出。

我想进行某种自动版本检测。

例如,当程序运行时,我希望将编译(构建)日期写入输出旁边的数据库。 (我不关心运行未编译代码时会发生什么)

我知道如何通过每次构建时更改源代码来手动执行此操作,但我正在寻找一种自动执行此操作的方法。

3 个答案:

答案 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语句的输出中),那么您的代码应该能够报告其修订号。

最后,只使用刚签出的代码构建。