使用CMake+matlab_add_mex编译mex文件找不到simstruc.h问题求助
问题成因
simstruc.h是Simulink专用的头文件,不属于基础Matlab MEX开发的头文件集合,find_package(Matlab)默认不会自动搜索并导入该头文件对应的目录- 直接在Simulink环境下执行
mex命令时,Simulink会自动将自身的头文件目录注入到编译参数中,因此不会触发头文件缺失报错
解决方法
方案1:显式添加Simulink头文件路径
find_package(Matlab)执行成功后会自动导出Matlab_ROOT_DIR变量,指向本地Matlab的安装根目录,simstruc.h通常存放在该根目录下的simulink/include路径中,你可以在CMake配置中显式导入该路径:
find_package(myLib REQUIRED) find_package(Matlab REQUIRED) # 全局导入Simulink头文件路径 include_directories(${Matlab_ROOT_DIR}/simulink/include) # 更推荐的写法:仅给当前MEX目标添加头文件路径,避免全局污染 # target_include_directories(cmake_mySrc.mexw64 PRIVATE ${Matlab_ROOT_DIR}/simulink/include) matlab_add_mex(NAME cmake_mySrc.mexw64 SRC mySrc.cpp LINK_TO myLib::myLib)
方案2:显式查找Matlab的Simulink组件
CMake 3.14及以上版本的FindMatlab模块支持指定查找Simulink组件,开启后会自动导入Simulink相关的头文件路径:
find_package(myLib REQUIRED) # 声明需要查找Simulink组件 find_package(Matlab REQUIRED SIMULINK) matlab_add_mex(NAME cmake_mySrc.mexw64 SRC mySrc.cpp LINK_TO myLib::myLib)
补充说明
- 如果后续出现其他Simulink相关头文件缺失,可以按需添加
${Matlab_ROOT_DIR}/extern/include路径到编译选项中 - 建议使用3.14及以上版本的CMake,避免因
FindMatlab模块功能不全导致的兼容问题
内容的提问来源于stack exchange,提问作者BDaniel
相关产品推荐
相关产品推荐

