Generate Code for Multiple Entry-Point Functions
An entry-point function is a stable interface to the generated code. For many applications, you only need to generate code for a single entry-point function. However, you can also generate C/C++ code for multiple entry-point functions simultaneously. By using multiple entry-point functions, you can:
Generate shared C/C++ libraries that have greater functionality than independent libraries for each entry-point function
Generate code that more efficiently shares subfunctions used by multiple entry-point functions
Generate library functions that can communicate using shared memory, such as when using the same
global
orpersistent
variables.
As a best practice, generate a MEX function to validate entry-point interactions in MATLAB® before generating a C/C++ library. See Check for Issues in MATLAB Code Using MEX Functions.
Specify Multiple Entry-Point Functions
To specify multiple entry-point functions, use one of these approaches:
If you use the MATLAB Coder™ app, on the Select page, select multiple entry-point functions.
If you generate code at the command line by using the
codegen
command, specify the entry-point functions followed by function arguments in a space-delimited list. For example, to generate code for entry-point functionsmyMult
andmyAdd
, each of which takes two scalar double inputs, use this command:codegen myMult -args {0,0} myAdd -args {0,0}
For more information about input-type specification, see Specify Types of Entry-Point Function Inputs.
Create Shared MEX Function
When you generate a MEX function for multiple entry-point functions, the code generates a single, shared MEX function. The default name and location of the shared MEX function depends on whether you generate code at the command line or by using the MATLAB Coder app.
Using the MATLAB Coder App
If you generate a MEX function by using the MATLAB Coder app, the app generates the MEX function in the same location as the MATLAB Coder project file. The app names the MEX function according to the Output file name property on the Generate page.
At the Command Line
If you generate a MEX function at the command line using the
codegen
command, the code generator saves the MEX function in the
working directory. The code generator names the MEX function using the name of one of
the entry-point functions. For example, generate code for function
myMult
and function myAdd
in namespace
myNamespace
. The code generator creates a shared MEX function
named myMult_mex
in the working
directory.
codegen myMult -args {0,0} myNamespace.myAdd -args {0,0}
The code generator creates a shared MEX function named myMult_mex
.
You can specify the name of the generated MEX function by using the
-o
option of the codegen
command. For example,
generate code for function myFun
and function
myAdd
in namespace myNamespace
, and specify the
name myMath
for the shared MEX function. The code generator creates a
shared MEX function named myMath
in the working
directory.
codegen -o myMath myMult -args {0,0} myNamespace.myAdd -args {0,0}
Use Shared MEX Functions
To call an individual entry-point function from a shared MEX function, pass the name of the entry-point function to the shared MEX function, followed by the required inputs. If the entry-point function is inside a namespace, call the function by using dot notation.
For example, to call the MEX function generated for myMult
with
sample inputs, use this
syntax:
myMath("myMult",5,6)
myAdd
in the namespace
myNamespace
with sample inputs, use this
syntax:myMath("myNamespace.myAdd",4,6)
Example: Generate Code for Multiple Entry-Point Functions Simultaneously
This example shows how to generate a multisignature MEX function and standalone C code for two functions simultaneously.
Define Functions
Define the function myAdd
in the namespace additionFunctions
. This function adds two inputs.
type(fullfile("+additionFunctions","myAdd.m"))
function out = myAdd(a,b) out = a+b; end
Define the function myMult
in the base namespace. This function multiplies two inputs.
type myMult.m
function out = myMult(a,b) out = a*b; end
Test the functions in MATLAB by using sample inputs.
additionFunctions.myAdd(4,5)
ans = 9
myMult(4,5)
ans = 20
Generate a Shared MEX Function
Generate a shared MEX function for the two entry-point functions by using the codegen
command. Specify two input arguments of type double
for each function. Use the -o
option to name the shared MEX function myMath
. The code generator creates the MEX function myMath
in the working directory. It generates the source, header, and object files in the folder codegen/mex/myMath
.
codegen -o myMath additionFunctions.myAdd -args {0 0} myMult -args {0 0}
Code generation successful.
Call the shared MEX function for each entry-point function. You must specify the namespace when calling myAdd
. Pass the same arguments you used to test the functions in MATLAB.
myMath("additionFunctions.myAdd",4,5)
ans = 9
myMath("myMult",4,5)
ans = 20
Generate C Code
Generate C code for additionFunctions.myAdd
and myMult
simultaneously. Use the -config:lib
option to specify a C static library target. Use the -o
option to instruct the code generator to use the name myMath
when naming the shared source, header, and object files.
codegen -config:lib -o myMath additionFunctions.myAdd -args {0 0} myMult -args {0 0}
Code generation successful.
Examine the generated files. The code generator stores the generated files in the folder codegen/mex/myMath
. The code generator begins the names of shared source, header, and object files with myMath
, but it generates separate source and header files for each entry-point function.
type(fullfile("codegen","lib","myMath","additionFunctions_myAdd.c"))
/* * File: additionFunctions_myAdd.c * * MATLAB Coder version : 24.2 * C/C++ source code generated on : 05-Sep-2024 13:47:48 */ /* Include Files */ #include "additionFunctions_myAdd.h" /* Function Definitions */ /* * Arguments : double a * double b * Return Type : double */ double additionFunctions_myAdd(double a, double b) { return a + b; } /* * File trailer for additionFunctions_myAdd.c * * [EOF] */
type(fullfile("codegen","lib","myMath","myMult.c"))
/* * File: myMult.c * * MATLAB Coder version : 24.2 * C/C++ source code generated on : 05-Sep-2024 13:47:48 */ /* Include Files */ #include "myMult.h" /* Function Definitions */ /* * Arguments : double a * double b * Return Type : double */ double myMult(double a, double b) { return a * b; } /* * File trailer for myMult.c * * [EOF] */