Как настроить CMake для компиляции MEX-файлов? - PullRequest
0 голосов
/ 19 февраля 2019

Я хотел бы скомпилировать MEX-файлы (исполняемые файлы MATLAB) в CLion, а не в MATLAB (что не помогает при написании кода C).Однако для MEX-файлов требуется файл #include mex.h (pp), который недоступен на обычном C ++.Кроме того, формат, который не имеет функции main, отличается.

Я использую MATLAB R2018b и надеюсь использовать C ++ 11 с использованием нового API C ++ для MEX-файлов .Тем не менее, я мог бы использовать и старый API.

Я попытался просмотреть модуль CMake FindMatlab и в некоторых других местах.Однако большинство других руководств устарели, и даже ссылки на них не связаны с их исходными страницами.

Я абсолютный новичок в CMake и не знаю, с чего начать.

В настоящее время я не могу использовать #include "mex.h", #include "mex.hpp", #include "mexAdapter.hpp" и т. Д. Я также не могу скомпилировать функцию без функции main.

Большое спасибо заранее всем, кто может помочь, загрузив или описав файл CMakeLists.txt, который будет необходим.

1 Ответ

0 голосов
/ 19 февраля 2019

Для компиляции MEX-файла ваш файл CMake должен содержать:

find_package(Matlab)
matlab_add_mex(NAME mex_file_name SRC source_file.cpp)

mex_file_name - имя цели, расширение добавляется автоматически.Это обычная цель, вы можете использовать set_target_properties, target_compile_definitions и т. Д. Для этой цели.

Если ваш MEX-файл должен быть связан с библиотекой, добавьте LINK_TO library в концеmatlab_add_mex команда.

Что касается использования нового C ++ API: я не помню, нужно ли добавлять флаг R2018a к вызову matlab_add_mex.Этот флаг необходим при использовании нового C API (сложное чередование), в отличие от старого C API (отдельный комплекс).Я думаю, что это не обязательно для C ++ API, но если что-то не скомпилируется, добавьте этот флаг, чтобы посмотреть, поможет ли он.

...