Build Process Customization
For certain applications, you might want to control aspects of the build process that occur after C/C++ source code generation but before compilation. For example, you can specify compiler or linker options. You can get and modify all the generated source files to add a copyright disclaimer. You can control the build process in a variety of ways. Customize the build process by:
Using the function
coder.updateBuildInfo.Using the methods of an
RTW.BuildInfoobject.Modifying the build information by using a
coder.ExternalDependencyclass.Modifying the build information with a script or function executed by the
PostCodeGenCommandconfiguration property. This script or function is called a post-code-generation command.
All of these approaches work by altering the makefile
that is generated and used to build your code. As a best practice, it is recommended to use
the first three approaches, coder.updateBuildInfo,
RTW.BuildInfo, and coder.ExternalDependency. These
approaches enable you to preconfigure your MATLAB® code with the build information that you require. Alternatively, the post-code
generation command can provide an additional, highly customizable approach, based around an
independent function or script.
The coder.ExternalDependency class and the post-code-generation command
provide access to the build information object, buildInfo. You can use
build information methods on buildInfo to configure project, build, and
dependency information. MATLAB
Coder™ creates buildInfo from the class
RTW.BuildInfo at the start of the build. This object is stored in a
MAT-file buildInfo.mat and saved in the build folder.
After code generation, you can access the build information object by loading it from
buildInfo.mat. Do not confuse the build information object with the
build configuration object, coder.BuildConfig, which provides specific
functionality for configuring build within a coder.ExternalDependency
class.
RTW.BuildInfo Methods
To access or write data to the build information object, use RTW.BuildInfo methods. Using
these methods you can modify:
Compiler options
Linker options
Preprocessor identifier definitions
Source files and paths
Include files and paths
Precompiled external libraries
Packaging options.
To call the methods, use the syntax:
method_name(buildInfo,input_arg1,...,input_argN)
Alternatively, you can enter:
buildInfo.method_name(input_arg1,...,input_argN)
To use the build information object after code generation is complete, load the
buildInfo.mat file from your generated code. For example:
load(fullfile('.','raspberrypi_generated_code','buildInfo.mat')); packNGo(buildInfo, 'fileName','copy_to_raspberrypi');
coder.updateBuildInfo Function
The coder.updateBuildInfo function provides a convenient way to
customize the build process from within your MATLAB code. For more information and examples, see the coder.updateBuildInfo and RTW.BuildInfo reference pages.
coder.ExternalDependency Class
When you are working with external code integration or you have multiple functions
that use the same build information, customize the build process by using the
coder.ExternalDependency class. The
coder.ExternalDependency class provides access to the build
information object and methods. For more information and examples, see Develop Interface for External C/C++ Code and the coder.ExternalDependency reference page.
Post-Code-Generation Command
As a best practice, customize your build process by using the first two approaches,
coder.updateBuildInfo and
coder.ExternalDependency. A third approach that provides
additional flexibility is a post-code-generation command. A post-code-generation command
is a function or script executed by the PostCodeGenCommand
configuration object property. Set the command by using your code generation
configuration object (coder.MexCodeConfig, coder.CodeConfig or coder.EmbeddedCodeConfig).
| Command Format | Result |
|---|---|
| Script | Script can gain access to the project (top-level function) name and the build information directly. |
| Function | Function can receive the project name and the build information as arguments. |
To write the post code-generation command as a script, set
PostCodeGenCommand to the script name. You can access the project
name in the variable projectName and the
RTW.BuildInfo object in the variable
buildInfo. At the command line, enter:
cfg = coder.config('lib');
cfg.PostCodeGenCommand = 'ScriptName';
When you define the command as a function, you can specify an arbitrary number of
input arguments. If you want to access the project name, include
projectName as an argument. If you want to modify or access build
information, add buildInfo as an argument. At the command line,
enter:
cfg = coder.config('lib');
cfg.PostCodeGenCommand = 'FunctionName(projectName, buildInfo)';
For example, consider the function setbuildargs that takes the
build information object as a parameter and adds linker options by using the
addLinkFlags method.
function setbuildargs(buildInfo) % The example being compiled requires pthread support. % The -lpthread flag requests that the pthread library be included % in the build linkFlags = {'-lpthread'}; buildInfo.addLinkFlags(linkFlags);
To use this function as a post-code-generation command, create a configuration object. Use this configuration object when you generate code. For example:
cfg = coder.config('dll'); cfg.PostCodeGenCommand = 'setbuildargs(buildInfo)'; codegen -config cfg foo
If you generate code with the MATLAB Coder app, set a post-code-generation command by using the Post-code-generation command parameter.
If your post-code-generation command calls user-defined functions, make sure that the functions are on the MATLAB path. If the build process cannot find a function that you use in your command, the process fails.
See Also
coder.MexCodeConfig | coder.CodeConfig | coder.EmbeddedCodeConfig | coder.updateBuildInfo | coder.ExternalDependency