This example shows how you can relocate generated code and compile it in another development environment. Use packNGo to create a zip file that contains generated source code and build information. In your target development environment, use the codebuild function to build the final library or executable file.
Open the model.
rtwdemo_codebuild
Do not automatically compile the code or generate a makefile.
set_param('rtwdemo_codebuild', 'GenerateMakefile', 'off');
After code generation, create a zip file that contains source code and build information files.
set_param('rtwdemo_codebuild', 'PackageGeneratedCodeAndArtifacts', 'on');
Run code generation command.
slbuild('rtwdemo_codebuild');
### Starting serial model reference code generation build ### Successfully updated the model reference code generation target for: rtwdemo_codebuild_ref ### Starting build procedure for: rtwdemo_codebuild ### Successful completion of code generation for: rtwdemo_codebuild Build Summary Code generation targets built: Model Action Rebuild Reason ================================================================================ rtwdemo_codebuild_ref Code generated rtwdemo_codebuild_ref.c does not exist. Top model targets built: Model Action Rebuild Reason ===================================================================================== rtwdemo_codebuild Code generated Code generation information file does not exist. 2 of 2 models built (0 models already up to date) Build duration: 0h 0m 44.826s
Check that generated code is packaged as a zip file.
dir rtwdemo_codebuild.zip
rtwdemo_codebuild.zip
This is an optional step. For example, if your current development environment is a Linux computer, you can copy the zip file to a Windows computer and then perform the subsequent steps on that computer.
Unzip the files.
rtwdemo_codebuild_files = unzip('rtwdemo_codebuild.zip');
Identify folder containing unzipped code for the top component.
rtwdemo_codebuild_top_component_folder = fileparts(rtwdemo_codebuild_files{1});
Identify the default toolchain (based on compiler selected by mex -setup).
defaultToolchain = coder.make.getDefaultToolchain;
Build the executable file.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', defaultToolchain);
Check that executable file is produced.
dir(fullfile(rtwdemo_codebuild_top_component_folder, '..', 'rtwdemo_codebuild*'))
rtwdemo_codebuild.exe rtwdemo_codebuild_grt_rtw
Select a template makefile for the current platform.
if ispc % With ert_vcx64.tmf, you must have Microsoft Visual C++ installed. If % it is not installed, specify ert_lcc64.tmf to use lcc-win64 instead. templateMakefile = 'ert_vcx64.tmf'; else templateMakefile = 'ert_unix.tmf'; end
Build the executable file.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', templateMakefile);
On Windows, create a definition file that specifies exported symbols.
if ispc exportsFile = fullfile... (rtwdemo_codebuild_top_component_folder, 'rtwdemo_codebuild.def'); fid = fopen(exportsFile, 'w'); fwrite(fid, ['EXPORTS' newline]); fwrite(fid, ['rtwdemo_codebuild_initialize' newline]); fwrite(fid, ['rtwdemo_codebuild_step' newline]); fwrite(fid, ['rtwdemo_codebuild_terminate' newline]); fclose(fid); end
Build the shared library.
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'SHARED_LIBRARY');
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'STATIC_LIBRARY');
Generate a hierarchy of platform and compiler independent CMakeLists.txt files
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', 'CMake');
With the CMakeLists.txt files, you can use the third-party tool CMake to generate makefiles or workspaces for a compiler environment of your choice. If CMake is installed on your development computer, build the executable file by running these commands in the MATLAB Command Window:
cd(rtwdemo_codebuild_top_component_folder)
!cmake .
!cmake --build .