我正在linux下编写一个自动分级程序。有几个用 MATLAB 编写的评分器,所以我想把它们绑在一起,让学生运行一个程序来做作业,让他们选择作业。我正在使用一个 C++ 主程序,然后将 mcc 编译的 MATLAB 库链接到它。
具体来说,我的程序会读取一个配置文件以获取各种 matlab 程序的名称以及其他信息。然后它使用该信息向学生展示选择。因此,如果分配更改、添加或删除,那么您所要做的就是更改配置文件。
这个想法是,接下来,程序调用已用 mcc 编译的正确 matlab 库。但是,这意味着如果分级机发生变化,则必须重新编译库。更糟糕的是,如果添加或删除评分器,则必须重新编译整个程序。所以,我想要一个简单、不变的 matlab 库函数来直接调用分级机 m 文件。我目前有这样一个库,它对从主程序传递给它的字符串使用 eval 。
问题是,当我这样做时,显然,mcc 将分级机 m 代码吸收到自身中;编译后更改grader m代码没有效果。我希望这不会发生。我注意到 Mathworks 可能不希望我这样做,因为它可以完全绕过 matlab。这不是我的本意,我会对需要完整安装 matlab 的解决方案感到满意。
我可能的解决方案是为主程序使用 mex 文件,或者让主程序调用 mcc 库,然后调用 mex 文件,然后调用适当的分级器。我对第一个解决方案犹豫不决的原因是我不确定我必须对我的代码进行多少更改才能使其正常工作。我的代码是 C++,而不是 C,我认为这会使事情变得更复杂。但是,第二种解决方案可能会更复杂,并且最终会遇到同样的问题。
那么,对这种情况有什么想法吗?我该怎么做?