関数のライブラリを含むVisual Studio 2010ソリューションがあり、MATLABをこのライブラリのいくつかの可能なフロントエンドの1つとして使用できるようにしたいと考えています。したがって、ソリューションをビルドするときにVisual Studioでmexファイルを自動的に生成し、ビルドオプションとパスをmexopts.batにエクスポートして、そこからファイルをビルドするためにMATLABを開く必要はありません。私は同様のことを達成するためにいくつかの提案を見てきました、例えばこれらの投稿で:
Matlab 7.1以降およびVisual Studio 2005
Visual Studioを使用したMEXファイルのコンパイル
CMakeおよびVisual Studio 2010(64ビット)を使用してMATLAB R2011a(64ビット)mexファイルをビルドする方法
ただし、それらは少し古くなっているように見える(参照されなくなったファイルを参照している)か、外部ツール(CMakeなど)を利用しています。最新のMATLABリリース用のmexファイルをビルドするVisual Studio(2010以降)で(既存のソリューション内に)新しいプロジェクトを設定する方法を知っている人はいますか?
質問で言及された このページ からのガイダンスを試してみたところ、空のC++プロジェクトから始めて、プロジェクトのプロパティページの次の設定が必要であり、Visual Studioから動作する.mexw64を構築するのに十分であるようです2010:
構成プロパティ->全般: ターゲット拡張子を.mexw64に設定 構成タイプをダイナミックライブラリ(.dll)に設定 構成ポップアップ- > VC++ディレクトリ: $(MATLAB_ROOT)\ extern\includeを追加します。ディレクトリを含める方法 構成プロパティ->リンカー->一般: $(MATLAB_ROOT)\ extern\lib\win64\Microsoft;を追加します。追加のライブラリディレクトリへ 構成プロパティ->リンカ->入力: libmx.lib; libmex.lib; libmat.lib;を追加します。追加の依存関係 構成プロパティ->リンカー->コマンドライン: /export:mexFunctionを追加のオプションに追加
$(MATLAB_ROOT)
は、Matlabのルートフォルダーへのパスです。 C:\ Program Files\MATLAB\R2013a。
これまでのところ、これはゼロから作成され、Matlab 2013a 64ビット用に構築されたソリューションからのみ試されています。 32ビット用にビルドするには、64と32の両方を変更するだけでよいと思います。これが既存のソリューションで機能することを確認したら、投稿を更新します。
EDIT:予想どおり、これは既存のソリューションに追加されたプロジェクトで機能します。新しいプロジェクトがライブラリを作成するプロジェクトに依存するように設定することを忘れないでください。
編集2:以下 この質問 上記の手順がVisual Studio 2012、2013、2017でも機能することを確認できます。
プロパティシートを使用してMEXファイル用のVisual Studioプロジェクトをすばやく設定する
すべての設定は、Visual Studioプロジェクト構成を迅速に適用するためのメカニズムであるプロパティシートを介して適用できます。
手順:
MATLAB_ROOT
_、32ビットのMATLABインストールの場合は_MATLAB32_ROOT
_(例:_C:\Program Files\MATLAB\R2014b\
_)。このフォルダには、bin、extern、sysなどのサブディレクトリがあります。VSが開いている場合は、VSを再起動します。それでおしまい!
MATLABを使用してMEXファイルを使用し、Visual Studioを使用して新しいバージョンをビルドする場合、それを上書きできるように_clear mex
_または_clear specificMEXFileName
_を実行する必要があることに注意してください。ほとんどすべてのMEXファイルをこの方法でビルドします。
UPDATE(05/22/15):ファイル MATLAB.props は、mxGPUArray
オブジェクト。マシンにツールボックスパスとライブラリ(gpu.lib)が存在する場合は、それらを使用できます。 CUDA SDKの「ビルドのカスタマイズ」(CUDA SDKをインストールしてVisual Studio統合をインストールした場合にインストールする必要があります)を含めてcuda_runtime.hなどを含めます。最後に、cudart_static.libとリンクします(ただし、継承します。オンにすると、他のリンカーエラーが発生します)。
プロパティシートの詳細
プロパティシートには重要な設定がいくつかあります。
$(MATLAB_ROOT)\extern\include
をAdditionalIncludeDirectories
パスに追加します(親構成から継承されたパスを使用)-mex.hの場所。$(MATLAB_ROOT)\extern\lib\win64\Microsoft
をAdditionalLibraryDirectories
パスに追加-libmex.libの場所など.libut.lib;libmx.lib;libmex.lib;libmat.lib
_。mexFunction
をエクスポートしています(共有ライブラリです):_/EXPORT:mexFunction
_。.mexw64
_ for x64)。不要ですが、ライブラリに埋め込まれていない出力マニフェストも指定し、_MATLAB_MEX_FILE
_を設定して、プロファイリングに必要なデータの生成をオンにします。
完全を期すために、プロパティシートを含む、プロジェクト構成用のより正式な " ビルド構成 "システムがありますが、単純なMEXプロジェクトを設定するには緩いプロパティシートで十分です。
_-largeArrayDims
_に関する注意
_-largeArrayDims
_オプションは、MATLABのmex
コマンドへのスイッチであり、単に定義しない _MX_COMPAT_32
_を示します。したがって、Visual Studioでは、これはデフォルトで定義されていないため、何もする必要はありません。逆の動作(_-compatibleArrayDims
_)が必要な場合は、プリプロセッサセクションで_MX_COMPAT_32
_を定義します。
libut.libは何のためのものですか?
Libut.libを含めます。これは、MEXファイル内からブレーク(CTRL-C)を検出するためのいくつかの素晴らしい関数を提供します。関連する宣言(これは話題から外れていますが):
_// prototype the break handling functions in libut (C library)
extern "C" bool utIsInterruptPending();
extern "C" void utSetInterruptPending(bool);
_
ビルド/リンク/コンパイルのために、拡張機能またはマクロを使用してVisual Studioを自動化します
Visual Studio 2010でこれを自動化しました。このようにして、Visual Studio IDEからmexラッパーを完全に操作し、デバッグ用の4つの追加プッシュボタンがあります。コンパイルエラーは、Visual Studio内ではなく、MATLABターミナルウィンドウからエコーされます。ここにアップロードされたマクロを見つけます: