MATLAB Coder: Option "generate one file for each MATLAB file"

Hello, I want to produce C/C++ standalone Code with MATLAB Coder. Although i took the option "generate one file for each MATLAB file" some MATLAB files are translated together in one C/C++ file. Is there another option to take influence on that? Kind regards Andreas

6 Comments

Hi Andreas. Can you provide an example of when this happens? For example, two .M files that MATLAB Coder will combine into a single file, even with the "generate one file for each MATLAB file" option selected.
Hello Carl,
I give a easy litle example. I want to generate code for the entry point function fcn1.fcn1 calls a second function fcn2, that's not declared as entry-point function.
function b = fcn1(a) b = fcn2(a); end
function b = fcn2(a) b = a+1; end
In my generated code i just get all the initialization files and one file fcn1. fcn2 doesn't get generated or declared somewhere. For a code with many 'private' nested functions C/C++ Code becomes very hard to understand. I'm using MATLAB R2016B.
For MATLAB Coder to generate separate files for fcn2, you will need to provide it as an entry-point function. Otherwise, like you observed, its functionality will simply get integrated into fcn1. Is there a specific use case for which you want to define fcn1 as an entry-point function, but not fcn2? For example, are you trying to have code generated for fcn2, but only accessible within fcn1.c?
I tried this allready. So ist get a file for fcn2. But in fcn1 there is no call of fcn2. Fcn1 is y=x+1
I thing dividig code into single functions is the the best Way to structure and reuse your Code. If i get just one large C\C++ File with some hundrets of lines, there is noch Chance to Debug that anymore. Furthermore i think thats the Common way to write Code with many private funktions and only export some public ones.
What i don't unterstand is, that for some of the called not entry point functions a extra C-file is generated and for some not. Is there any way to influence that by some Coder Flag.
Thanks for following up. To prevent MATLAB Coder from inlining a function, you can use the line "coder.inline('never')". For example:
function b = fcn2(a)
coder.inline('never')
b = a + 1;
end
This will prevent fcn2 from being inlined in fcn1.
Thank you.
The option coder.inline('never') was exactly, what i was searching for.

Sign in to comment.

 Accepted Answer

Possible solutions:
  1. Provide both functions as an entry-point function
  2. Use the coder.inline flag to control whether a function gets inlined (see documentation below)
https://www.mathworks.com/help/simulink/slref/coder.inline.html

More Answers (0)

Categories

Find more on MATLAB Coder in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!