Я пишу программу автоматического грейдера под Linux. В MATLAB написано несколько классников, поэтому я хочу связать их всех вместе и позволить студентам запустить программу для выполнения задания, и пусть они выберут это задание. Я использую основную программу на C ++, с которой связаны mcc-скомпилированные библиотеки MATLAB.
В частности, моя программа читает конфигурационный файл с именами различных программ matlab и другой информацией. Затем он использует эту информацию для представления выбора студенту. Таким образом, если назначение изменяется, добавляется или удаляется, все, что вам нужно сделать, это изменить файл конфигурации.
Идея состоит в том, что затем программа вызывает правильную библиотеку matlab, скомпилированную с помощью mcc. Но это означает, что библиотеки должны быть перекомпилированы, если изменяется класс. Хуже того, вся программа должна быть перекомпилирована, если грейдер добавлен или удален. Итак, я хотел бы, чтобы одна простая и неизменная функция библиотеки Matlab вызывала m-файлы грейдера напрямую. В настоящее время у меня есть такая библиотека, которая использует eval для строки, переданной ей из основной программы.
Проблема в том, что когда я делаю это, очевидно, mcc впитывает в себя m-код грейдера; изменение кода грейдерного кода после компиляции не имеет никакого эффекта. Я бы хотел, чтобы этого не произошло. Мне стало известно, что Mathworks, возможно, не хочет, чтобы я мог это сделать, поскольку он мог полностью обойти matlab. Это не мое намерение, и я был бы рад решению, которое требует полной установки Matlab.
Мои возможные решения - использовать mex-файл для основной программы или сделать так, чтобы основная программа вызывала mcc-библиотеку, которая затем вызывает mex-файл, который затем вызывает соответствующий класс. Причина, по которой я сомневаюсь в первом решении, заключается в том, что я не уверен, сколько изменений мне придется внести в мой код, чтобы заставить его работать; мой код - C ++, а не C, что, я думаю, усложняет ситуацию. Второе решение, однако, может быть более сложным и, в конечном счете, иметь ту же проблему.
Итак, есть мысли по поводу этой ситуации? Как мне это сделать?