別の開発環境でのコードのコンパイル
この例では、生成されたコードを別の開発環境に移動させて、コンパイルする方法を示しています。packNGo を使用して、生成されたソース コード、ビルド情報、および CMake コンフィギュレーション ファイルが含まれる ZIP ファイルを作成します。ターゲットの開発環境で、関数 codebuild を使用して最終的なライブラリまたは実行可能ファイルをビルドします。
モデルの設定
モデルを開きます。
CodeBuildModel
コードのコンパイル、makefile の生成、生成コードとアーティファクトのパッケージ化を自動的に行いません。
set_param('CodeBuildModel', 'GenerateMakefile', 'off'); set_param('CodeBuildModel', 'PackageGeneratedCodeAndArtifacts', 'off');
コードと CMake コンフィギュレーション ファイルの生成
コード生成コマンドを実行します。
slbuild('CodeBuildModel');
### Starting serial model reference code generation build. ### Model reference code generation target for CodeBuildRefModel is up to date. ### Starting build procedure for: CodeBuildModel ### Generated code for 'CodeBuildModel' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of code generation for: CodeBuildModel Build Summary 0 of 2 models built (2 models already up to date) Build duration: 0h 0m 5.7486s
CMakeLists.txt コンフィギュレーション ファイルを生成します。
buildFolder = RTW.getBuildDir('CodeBuildModel').BuildDirectory; codebuild(buildFolder, 'BuildMethod', 'cmake');
生成コードと CMake コンフィギュレーション ファイルのパッケージ化
packNGo を実行し、ファイルを階層的にパッケージ化します。
packNGo(buildFolder, 'packType', 'hierarchical', 'nestedZipFiles', false);
別の開発環境への切り替え
これはオプションの手順です。たとえば、現在の開発環境が Linux コンピューターである場合、zip ファイルを Windows コンピューターにコピーして、そのコンピューターで後続の手順を実行できます。
ソース コードとビルド情報ファイルの解凍
ファイルを解凍します。
CodeBuildModel_files = unzip('CodeBuildModel.zip');
最上位レベルのコンポーネントの圧縮されていないコードが含まれるフォルダーを特定します。
CodeBuildModel_top_component_folder = fileparts(CodeBuildModel_files{1});
既定のツールチェーンを使用した実行可能ファイルのビルド
(mex -setup で選択されたコンパイラに基づいて) 既定のツールチェーンを特定します。
defaultToolchain = coder.make.getDefaultToolchain;
実行可能ファイルをビルドします。
codebuild(CodeBuildModel_top_component_folder, 'BuildMethod', defaultToolchain);
実行可能ファイルが生成されていることを確認します。
dir(fullfile(CodeBuildModel_top_component_folder, '..', 'CodeBuildModel*'))
CodeBuildModel.exe CodeBuildModel_grt_rtw
既定のテンプレート makefile を使用して実行可能ファイルをビルド
現在のプラットフォーム向けのテンプレート makefile を選択します。
if ispc % With ert_vcx64.tmf, you must have Microsoft Visual C++ installed. templateMakefile = 'ert_vcx64.tmf'; else templateMakefile = 'ert_unix.tmf'; end
実行可能ファイルをビルドします。
codebuild(CodeBuildModel_top_component_folder, 'BuildMethod', templateMakefile);
共有ライブラリのビルド
Windows の場合、エクスポートされた記号を指定する定義ファイルを作成します。
if ispc exportsFile = fullfile... (CodeBuildModel_top_component_folder, 'CodeBuildModel.def'); fid = fopen(exportsFile, 'w'); fwrite(fid, ['EXPORTS' newline]); fwrite(fid, ['CodeBuildModel_initialize' newline]); fwrite(fid, ['CodeBuildModel_step' newline]); fwrite(fid, ['CodeBuildModel_terminate' newline]); fclose(fid); end
共有ライブラリをビルドします。
codebuild(CodeBuildModel_top_component_folder, 'BuildVariant', 'SHARED_LIBRARY');
スタティック ライブラリのビルド
codebuild(CodeBuildModel_top_component_folder, 'BuildVariant', 'STATIC_LIBRARY');
CMake コンフィギュレーション ファイルの使用
CMakeLists.txt ファイルがあれば、サードパーティ製のツール CMake を使用して、選択したコンパイラ環境向けに makefile またはワークスペースを生成できます。
現在のプラットフォーム向けの CMake コマンドを計算します。
if ispc cmakeCommand = fullfile(matlabroot, 'bin', computer('arch'), 'cmake', 'bin', 'cmake.exe'); else cmakeCommand = fullfile(matlabroot, 'bin', computer('arch'), 'cmake', 'bin', 'cmake'); end
CMake を使用して、実行可能ファイルをビルドします。
cd(CodeBuildModel_top_component_folder) [status1, cmdout1] = system([cmakeCommand ' .']); [status2, cmdout2] = system([cmakeCommand ' --build .']);