Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

別の開発環境でのコードのコンパイル

この例では、生成されたコードを別の開発環境に移動させて、コンパイルする方法を示しています。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 .']);

参考

|

関連するトピック