为什么在Simulink中交付的模型或在Accelerator模式中运行的模型的构建过程失败?万博1manbetx

372次观看(过去30天)
当我尝试构建内置演示时,我得到一条错误消息,说明构建失败了。我有一个支持的编译万博1manbetx器安装和正确设置。
错误信息如下所示:
U1073:不知道如何创建“C:\程序”
停止。
make命令返回2的错误
' an_error_occurs _during_the_call_to_make'不能被识别为内部或外部命令,
可操作的程序或批处理文件。
在以Accelerator模式运行的模型的构建日志中可能会出现类似的错误。

接受的答案

MathWorks支万博1manbetx援小组
编辑:MathWorks支万博1manbetx援小组 2018年6月15日
构建过程中的问题是由于“模型”中的以下几行。可“makefile。.mk文件包含以下代码:
MATLAB_ROOT = C:\Program Files\MATLAB\R2013a
ALT_MATLAB_ROOT = C:\Program Files\MATLAB\R2013a
MATLAB_BIN = C:\Program Files\MATLAB\R2013a\bin
ALT_MATLAB_BIN = C:\Program Files\MATLAB\R2013a\bin
由于MATLAB_ROOT和ALT_MATLAB_ROOT变量具有相同的值,makefile使用了带有空格的MATLAB_ROOT值。构建过程不知道如何处理路径中有空格的文件。MATLAB通常用短路径名填充ALT_MATLAB_ROOT,通常是“C:\PROGRA~1”。但是,在某些Windows系统上,短路径名的生成可能被禁用。此外,如果MATLAB本身在R2015a SP1更新和后续版本中安装在包含空格的路径中(例如C:\Program Files),则该问题已修复,不会发生。
正确的代码应该如下所示:
MATLAB_ROOT = C:\Program Files\MATLAB\R2013a
ALT_MATLAB_ROOT = C:\PROGRA~1\MATLAB\R2013a
MATLAB_BIN = C:\Program Files\MATLAB\R2013a\bin
ALT_MATLAB_BIN = C:\PROGRA~1\MATLAB\R2013a\bin
有一些方法可以解决这个问题。
  • 解决方案1 -使用Windows短名称:
这可能是最简单的解决方案。万博 尤文图斯Windows注册表中有一个设置,可以启用/禁用文件路径的短名称生成。请使用以下步骤更改此设置:
(注意:由于程序文件文件夹上的Windows安全设置,此方法可能不起作用。如果在第4步中收到“错误:访问被拒绝”的消息,请使用其他解决方案之一。)万博 尤文图斯
1.进入Windows开始菜单,搜索“regedit.exe”。将打开一个新窗口。
2.导航到以下位置:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ \文件系统\ NtfsDisable8dot3NameCreation控制
3.修改“NtfsDisable8dot3NameCreation”的值为0。
将该值更改为0将允许在Windows路径中使用短名称。更多信息可以在微软的网站上找到:
4.但是,更改上述值只会设置更改后创建的短名称文件和文件夹。在Windows命令提示符中设置“fsutil”函数的短名称。设置短名称的语法如下:
> fsutil文件setshortname . txt
以“C:\Program Files”为例,用户将发出以下命令将“Program Files”的简称设置为“PROGRA~1”。
> fsutil文件setshortname "C:\程序文件" PROGRA~
目录需要用引号括起来,因为它有空格。
5.要检查短名称是否设置正确,请使用“dir”命令和“/x”选项来显示短名称。
>目录C:\ /x
更多关于“fsutil”的信息可以在这里找到:
  • 解决方案2 -创建一个符号链接到MATLAB安装文件夹:
1.打开Windows命令提示符。进入C:目录。
2.创建到安装MATLAB版本的位置的符号链接。语法如下:
> mklink /d <链路> <目标>
例如,一个典型的MATLAB安装文件夹是C:\Program Files\MATLAB.要链接到名为MyMatlab的文件夹,请使用以下命令:
> mklink /d C:MyMatlab“C: \ Program Files \ MATLAB”
如果打开新的MyMatlab文件夹,应该会看到已安装的每个MATLAB版本的文件夹。
3.为MATLAB创建一个新的快捷方式。这可以放在你的桌面上或任何你想要的地方。
4.右键单击快捷方式并打开属性。
5.转到“快捷方式”选项卡。在'Target:'选项中,将有一个可执行文件的路径,用于从这个快捷方式启动MATLAB。修改此路径以使用新创建的符号链接。对于上面的示例,它应该是这样的
C: \ MyMatlab \ R2013a \ bin \ matlab.exe
6.从这个快捷方式启动MATLAB。通过在命令窗口中输入“matlabroot”来验证位置,不带引号,现在应该没有空格了。
7.如果您有多个版本的MATLAB,请对每个版本重复步骤3-6,以便它们将从路径中没有空格的位置启动。
此解决方案适用于新创建的快捷方式。如果您从不同的位置启动MATLAB,它将不会使用符号链接,并且路径中的空格也会有同样的问题。
  • 解决方案3 -更改MATLAB安装文件夹:
我们使用短路径的原因是为了避免路径中的空白。通过在路径中没有任何空格的位置重新安装MATLAB,可以解决构建问题。但是,这将需要您下载并重新安装MATLAB。
例如,MATLAB可以安装在如下路径
C: \ MATLAB_Install \ MATLAB \ R2013a
与解决方案2非常相似,此解决方案将要求您为所使用的所有版本重新安装MATLAB。
  • 解决方案4 -修改模板makefile
解决这个问题的另一种方法是用双引号括起文件名。这将导致构建过程按字面意思处理双引号括起来的文件名,从而使构建成功。
为此,打开用于代码生成的模板makefile。复制这个文件并重命名它。在这个文件中,当“$(MATLAB_ROOT)”被用作路径的一部分时,在“$”符号之前和路径的最后一个字符之后加上双引号。例如,如果TMF中的原始行是:
工具箱(MATLAB_ROOT) \ \ rtw \ \ xpc目标\ \制造\目标xpcblocks} . c。obj:
这一行将改为:
“美元(MATLAB_ROOT) \工具箱\ rtw_targets \ xpc目标\ \制造\ xpcblocks”} . c。obj:
在“配置参数”->“代码生成”中,确保“Template makefile”选项指向修改后的TMF,否则更改将不会反映在生成的代码中。
对于所使用的每个模板制作文件,都需要重复此方法。
一个实用的MATLAB R2017a文档页面,讨论了为文件夹名启用带有空格的构建过程的方法,可以在以下链接中找到:
在“Windows上的构建过程文件夹支持”一节中提到的限制在上面提到的方法中得到了解决。万博1manbetx
8的评论
卡雷尔Viaene
卡雷尔Viaene 2020年12月15日
你好,
我以前遇到过这个问题,使用SOLUTION 2帮助我从simulink模型构建了一个. dll。万博1manbetx
在后来的项目中,我又遇到了同样的问题,但解决方案2没有奏效,在没有空格的路径上重新安装matlab也没有帮助。奇怪的是,我可以用matlab 2019a构建,但不能用matlab 2020b或2021b。
用mex -setup更改编译器也没有帮助。我尝试了mingw, Microsoft Visual c++ 2015 (C), Microsoft Visual c++ 2017 (C)和Microsoft Visual c++ 2019 (C)。
最后,问题似乎是我的构建文件夹位于F:\驱动器上,而matlab和Microsoft Visual c++ 2017 (C)安装在C:\驱动器上。
在将我的模型文件移动到C:\驱动器上的文件夹后,构建成功。
基米-雷克南,
布莱希特

登录评论。

更多答案(4)


praveen mirajkar
praveen mirajkar 2017年9月4日
你好,下面是错误
C: / ProgramData / MAT万博1manbetxLAB / SupportPackages / R2017a /工具箱/目标/ SupportPackages armcortexmbase / cmsis_rtos_rtx / src / mw_signal.c gmake: *没有规则使目标' C:/ProgramData/MATLAB/SupportPackages/万博1manbetxR2017a/toolbox/target/ SupportPackages/ freedomk64f/src/ksdk_armgcc_lib/bm/libksdk_platform. C:/ProgramData/MATLAB/SupportPackages/R2017a/toolbox/target/ SupportPackages/ freedomk64f/src/ksdk_armgcc_lib/bm/libksdk_platform。A ',由'. ./untitled.elf'需要。停止。G:\Program Files\MATLAB\R2017a\untitled_ert_rtw>echo make命令返回2个错误G:\Program Files\MATLAB\R2017a\untitled_ert_rtw> an_error_happens _during_call_to_make ' an_error_happens _during_the_call_to_make'不被识别为内部或外部命令,可操作的程序或批处理文件。
我已经尝试了所有的解决方案,还万博 尤文图斯是不能解决这个问题,有人能帮帮我吗?

哈立德
哈立德 2016年4月7日
你好,
我使用的是Matlab 2015b和Matlab 2012b。我尝试了第二个解决方案,但它只适用于Matlab 2012B。我不知道如何用Matlab 2015b修复它。还有其他解决办法吗?
谢谢

Salai Selvam V
Salai Selvam V 2016年9月20日
亲爱的朋友们,我感谢Mathworks支持团队为回答问题所做的努力。万博1manbetx但据我所知和经验,答案似乎没有超出实际情况。我遇到了同样的问题,同样的错误消息,但我纠正它非常简单,没有任何方法提到这里。
修正前的情景:
我把我的文件(m文件和包装器c文件)保存在一个文件夹中,即:
D: \ \ MATLAB&C \ MATLAB2C \研究CODEGEN \ TutorialToMATLAB2C \ CODERAND
这就是问题所在:文件夹名称:“MATLAB&C”和“MATLAB2C”和TutorialToMATLAB2C”。
我将文件夹名称更改为:
D: \ \ MATLABAndC \ MATLABToC \研究CODEGEN \ TutorialToMATLABToC \ CODERAND
这就解决了问题。
我的文件:
1) m文件:coderand.m
函数R = coderand()% # codegen
指令%#codegen指示函数
%用于代码生成
R = rand();
2) C包装文件:main.c
/*
* * c
* /
包括< stdio . h >
包括< stdlib.h >
包括“coderand.h”
包括“coderand_initialize.h”
包括“coderand_terminate.h”
intmain ()
coderand_initialize ();
printf (“coderand = % g \ n”coderand ());
coderand_terminate ();
返回0;
3) m脚本文件:cccoderand.m
CFG = code .config(exe”);
cfg。CustomSource =“c”
cfg。CustomInclude =D: \研究\ MATLABAndC \ MATLABToC \ CODEGEN \ TutorialToMATLABToC \ CODERAND”
codegen-config CFG码
这些都是朋友。谢谢。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!