Использование относительных путей с Matlab Coder - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь сгенерировать C-код для функции Matlab. Он использует веб-сервер Мангуста для общения. Если я поместу файлы .h/.c в ту же папку, что и файл .m, я смогу скомпилировать все нормально, используя:

coder.cinclude('mongoose.h');
coder.updateBuildInfo('addSourceFiles','mongoose.c');
coder.cinclude('rest.h');
coder.updateBuildInfo('addSourceFiles','rest.c');

Я бы хотел сохранить мои файлы .c и .m отдельнымипоэтому перемещение файлов C в папку с именем native/ приводит к сбою компиляции, как и ожидалось. Таким образом, я говорю Matlab, где их найти, используя:

customDir = '/full/path/to/native';
coder.updateBuildInfo('addIncludePaths', customDir);
coder.updateBuildInfo('addSourcePaths', customDir);

Что работает. Однако он работает только с абсолютными путями, а не с относительными путями. Это проблема, поскольку каждый участник этих проектов хранит исходную папку в другом месте. Как правильно определить месторасположение файлов Matlab, используя относительные пути к рабочему каталогу Matlab?

1 Ответ

0 голосов
/ 21 октября 2019

Если вы просто хотите сгенерировать код на C (а не скомпилировать), я бы предложил добавить относительные местоположения этих файлов в путь Matlab. Вы можете сделать это с помощью:

addpath('the_relative_path_to_native')

Или даже лучше:

addpath(fullfile(cd(), 'the_relative_path_to_native'))

После выполнения этой команды Matlab ищет в этой папке.m функции, а также включенные файлы C. Это должно решить вашу проблему, как описано.

Но позже, если вы захотите скомпилировать сгенерированный код, включенные папки не будут скопированы / объединены / включены в каталог codegen, созданный Matlab, поэтому вам следуетобрабатывать это другим способом, например включать каталог в пользовательский makefile os, добавляя команду для копирования необходимых файлов в папку, удобную для компиляции.

...