matlab - 如何配置 CMake 来编译 MEX 文件?
问题描述
我想在 CLion 而不是在 MATLAB 中编译 MEX 文件(MATLAB 可执行文件)(这对编写 C 代码没有帮助)。但是,MEX 文件需要 #include mex.h(pp),这在普通 C++ 上不可用。而且,没有main
功能的格式也不同。
我正在使用 MATLAB R2018b 并希望使用 C++11 使用新的 C++ API for MEX-files。但是,我也可以使用旧的 API。
我曾尝试查看CMake 的 FindMatlab 模块和其他几个位置。但是,大多数其他指南都已过时,甚至其参考链接也无法连接到其原始页面。
我是 CMake 的绝对新手,我不知道从哪里开始。
我目前无法使用#include "mex.h"
,#include "mex.hpp"
等#include "mexAdapter.hpp"
。我也无法编译没有函数的main
函数。
非常感谢任何可以通过上传或描述 CMakeLists.txt
必要的文件来提供帮助的人。
解决方案
要编译 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 没有必要,但如果无法编译,请添加此标志以查看是否有帮助。
推荐阅读
- python - Tally ODBC 的连接问题
- javascript - 根据单击的复选框重定向表单
- php - Mysql 端口 3308 未与 wamp 3.2 中的 127.0.0.1:8000 laravel 6* 连接
- python - 从 XML 中获取元素并插入 Postgres DB
- docker - Vue 容器无法从应用程序访问 URL,但可以从容器的 bash 访问
- python - 从数据框中的数字中提取最高位值数字
- c - 共享库卸载和 atexit 处理 - 什么顺序?
- css - 如何为 React bootstrap DropDown 添加滚动条?
- android - MpAndroidChart valueformatter xAxis 的问题
- chrome-web-store - 谷歌拒绝发布 Chrome 扩展程序,称“您的产品违反了该政策的隐私政策和安全传输部分”