Matlab 如何生成合并的源文件?

Matlab 如何生成合并的源文件?,matlab,Matlab,MATLAB是否具有以下功能:获取直接包含其他.m文件的源代码,并输出合并所有包含文件后产生的源代码 例如,考虑 Script PtUn.M./C> >: % some matlab code script_two % more matlab code 我想以编程方式生成.m文件,该文件将通过将script\u two.m的内容复制并粘贴到script\u one.m中而产生。使用普通脚本工具很难做到这一点,因为我基本上需要一个MATLAB符号表来确定哪些标识符对应于源代码脚本。我非常怀疑Ma

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

例如,考虑<代码> Script PtUn.M./C> >:

% some matlab code
script_two
% more matlab code
我想以编程方式生成
.m
文件,该文件将通过将
script\u two.m
的内容复制并粘贴到
script\u one.m
中而产生。使用普通脚本工具很难做到这一点,因为我基本上需要一个MATLAB符号表来确定哪些标识符对应于源代码脚本。我非常怀疑Matlab是否提供了这样的功能,但我愿意接受其他想法

“用例”是指需要修改源代码(使用
sed
),但更改需要传播到任何依赖脚本,例如
script\u two.m
。由于我没有依赖脚本的列表,因此只能通过手动检查源代码来识别它们(需要在大量动态创建的文件上进行识别)

有关用例的一些详细信息:
使用动态创建的头文件调用主脚本(script_one),例如,
matlab[args]-r'一些定义;脚本二;脚本三;其他,;主脚本();退出()”
。这是在机器A上运行的;为了实现负载平衡,它可能需要在机器B、C等上运行,这些机器在某个时候装载了A的文件系统。包含的
.m
文件(主要用作头文件)中的任何路径都需要在新主机上运行。最简单的解决方案是预处理为机器A生成的代码,使用
sed
替换新主机(B、C等)的所有路径。当然,可以通过在matlab中进行更改来解决这个问题,但就节约而言,sed单线性规划是一个更具吸引力的解决方案。

一般来说,不,在matlab中是不可能的。您想要的是一种在执行之前需要编译步骤的语言所共有的语言特性,但这不是MATLAB的语言模型,因此,它只能通过骇人听闻的语言滥用来实现

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

[o,e]=系统(“”);
% ... 还有代码吗
%执行新生成的M文件
[输出]=eval('script_one');
但我希望你们能看到并同意,这会很快变成意大利面


使用不断变化的上下文和参数执行脚本正是语言功能的初衷:)

而输出的变化不能通过函数和输入来完成?我怀疑你的解决方案对用例来说是否“正确”…你能提供更多细节吗?@RodyOldenhuis:是的,它们肯定可以通过函数参数来完成,但我正在寻找一种避免重写的方法,如果我能使用
sed
进行所有更改的话。我将用特定用例的细节更新我的问题。好吧,你的解决方案似乎比在MATLAB中重写复杂得多……但我想这取决于你对每个工具的熟悉程度。在任何情况下,这将不可避免地导致使用
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');