このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
別の開発環境でのコードのコンパイル
この例では、生成されたコードを別の開発環境に移動させて、コンパイルする方法を示しています。packNGo を使用して、生成されたソース コード、ビルド情報、および CMake コンフィギュレーション ファイルが含まれる ZIP ファイルを作成します。ターゲットの開発環境で、関数 codebuild を使用して最終的なライブラリまたは実行可能ファイルをビルドします。
モデルの設定
モデルを開きます。
rtwdemo_codebuild
コードのコンパイル、makefile の生成、生成コードとアーティファクトのパッケージ化を自動的に行いません。
set_param('rtwdemo_codebuild', 'GenerateMakefile', 'off'); set_param('rtwdemo_codebuild', 'PackageGeneratedCodeAndArtifacts', 'off');
コードと CMake コンフィギュレーション ファイルの生成
コード生成コマンドを実行します。
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 56.832s
CMakeLists.txt コンフィギュレーション ファイルを生成します。
buildFolder = RTW.getBuildDir('rtwdemo_codebuild').BuildDirectory; codebuild(buildFolder, 'BuildMethod', 'cmake');
生成コードと CMake コンフィギュレーション ファイルのパッケージ化
packNGo を実行し、ファイルを階層的にパッケージ化します。
packNGo(buildFolder, 'packType', 'hierarchical', 'nestedZipFiles', false);
別の開発環境への切り替え
これはオプションの手順です。たとえば、現在の開発環境が Linux コンピューターである場合、zip ファイルを Windows コンピューターにコピーして、そのコンピューターで後続の手順を実行できます。
ソース コードとビルド情報ファイルの解凍
ファイルを解凍します。
rtwdemo_codebuild_files = unzip('rtwdemo_codebuild.zip');
最上位レベルのコンポーネントの圧縮されていないコードが含まれるフォルダーを特定します。
rtwdemo_codebuild_top_component_folder = fileparts(rtwdemo_codebuild_files{1});
既定のツールチェーンを使用した実行可能ファイルのビルド
(mex -setup で選択されたコンパイラに基づいて) 既定のツールチェーンを特定します。
defaultToolchain = coder.make.getDefaultToolchain;
実行可能ファイルをビルドします。
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', defaultToolchain);
実行可能ファイルが生成されていることを確認します。
dir(fullfile(rtwdemo_codebuild_top_component_folder, '..', 'rtwdemo_codebuild*'))
rtwdemo_codebuild.exe rtwdemo_codebuild_grt_rtw
既定のテンプレート makefile を使用して実行可能ファイルをビルド
現在のプラットフォーム向けのテンプレート makefile を選択します。
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
実行可能ファイルをビルドします。
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildMethod', templateMakefile);
共有ライブラリのビルド
Windows の場合、エクスポートされた記号を指定する定義ファイルを作成します。
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
共有ライブラリをビルドします。
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'SHARED_LIBRARY');
スタティック ライブラリのビルド
codebuild(rtwdemo_codebuild_top_component_folder, 'BuildVariant', 'STATIC_LIBRARY');
CMake コンフィギュレーション ファイルの使用
CMakeLists.txt ファイルがあれば、サードパーティ製のツール CMake を使用して、選択したコンパイラ環境向けに makefile またはワークスペースを生成できます。
% Compute the CMake command for the current platform. 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(rtwdemo_codebuild_top_component_folder) [status1, cmdout1] = system([cmakeCommand ' .']); [status2, cmdout2] = system([cmakeCommand ' --build .']);