如何生成合并的源文件?

时间:2017-11-10 06:32:13

标签: matlab

MATLAB是否具有以下功能:获取直接包含其他.m文件的源代码,并输出合并所有包含文件所产生的源?

例如,考虑script_one.m

% some matlab code
script_two
% more matlab code

我想以编程方式生成.m文件,该文件可能会将script_two.m的内容复制并粘贴到script_one.m中。这对于普通的脚本工具很难做到,因为我基本上需要一个MATLAB符号表来确定哪些标识符对应于可源脚本。我非常怀疑Matlab提供了这样的设施,但我对其他想法持开放态度。

"用例"需要修改源(使用sed),但需要将更改传播到任何依赖脚本,例如script_two.m。由于我没有依赖脚本的列表,因此只能通过手动浏览源来识别它们(并且需要在大量动态创建的文件上完成)。

用例的一些细节: 使用动态创建的头文件(例如matlab [args] -r 'some definitions; script_two; script_three; others; main_script();quit()')调用主脚本(script_one)。这是在机器A上运行的;对于负载平衡,可能需要在机器B,C等上运行,这些机器在某些时候挂载A的文件系统。包含的.m文件中的任何路径(主要用作标题)都需要基本上是chrooted来处理新主机。最简单的解决方案是预处理为机器A生成的代码,使用sed替换新主机(B,C等)的所有路径。它当然可以通过在matlab中进行更改来解决,但就简约性而言,sed one-liner是一个更具吸引力的解决方案。

1 个答案:

答案 0 :(得分:1)

一般来说,不,这在MATLAB中是不可能的。您想要的是在执行前需要编译步骤的语言所共有的语言功能,但这不是MATLAB的语言模型,因此,它只能通过hacky古怪的语言滥用来实现。

可以想象,您可以创建一个主脚本,负责协调新源文件的生成,并通过eval()执行它们:

[o,e] = system('<your sed command here, to generate script_one.m>');

% ... some more code

% execute newly generated M-file
[outputs] = eval('script_one');

但我希望你能看到并同意这很快变成意大利面

执行更改上下文和参数的脚本正是function语言功能的发明:)