Быстрая настройка проектов Visual Studio для файлов MEX с помощью листа свойств
Все настройки можно применить через листы свойств, механизм для быстрого применения конфигураций проекта Visual Studio.
Шаги:
- Загрузите лист свойств (MATLAB.props) из этого репозитория GitHib. Это коротко и мило. Я действительно призываю вас сделать свой собственный, чтобы узнать, что вовлечено в процесс. Описание см. в разделе «Сведения о листе свойств» ниже.
- Установите переменные корневой среды MATLAB:
MATLAB_ROOT
для вашей 64-битной установки MATLAB и MATLAB32_ROOT
для любых 32-битных установок MATLAB (например, C:\Program Files\MATLAB\R2014b\
). В этой папке есть подкаталоги bin, extern, sys и т. д. Перезапустите VS, если он открыт.
- Создайте пустой проект DLL в Visual Studio, при необходимости создав платформу решения x64. Сделайте это, выбрав «Проект Win32» и выбрав DLL следующим образом:
- В «Диспетчере свойств» (выберите в меню «Вид») для конфигурации сборки каждого проекта щелкните правой кнопкой мыши и выберите "Добавить существующую страницу свойств..." и выберите соответствующую страницу свойств (32- или 64-разрядную версию). (См. скриншот ниже)
Вот и все!
Просто помните, что при переходе между MATLAB для использования вашего файла MEX и Visual Studio для создания новой версии необходимо будет запустить clear mex
или clear specificMEXFileName
, чтобы иметь возможность перезаписать его. Таким образом я создаю почти все свои файлы MEX.
ОБНОВЛЕНИЕ (22.05.15): файл MATLAB.props теперь поддерживает Parallel Computing Toolbox для использования mxGPUArray
объектов. Если путь к набору инструментов и библиотека (gpu.lib) существуют на вашем компьютере, их можно использовать. Просто включите CUDA SDK «Настройка сборки» (который должен быть установлен, если вы установили CUDA SDK и установили интеграции Visual Studio), чтобы включить cuda_runtime.h и т. д. Наконец, свяжите с cudart_static.lib (но оставьте Inherit.. , проверено, иначе вы получите другие ошибки компоновщика).
Подробности страницы свойств
На странице свойств есть только несколько важных настроек:
- Добавление
$(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
для x64).
Не обязательно, но также указывает выходной манифест, который НЕ встроен в библиотеку, устанавливает MATLAB_MEX_FILE
и включает создание данных, необходимых для профилирования.
Для полноты картины обратите внимание, что существует более формальная "конфигурация сборки" система для конфигурации проекта, которая включает лист свойств, но отдельного листа свойств достаточно для настройки простого проекта MEX.
Примечание о -largeArrayDims
Параметр -largeArrayDims
является переключением на команду mex
в MATLAB, которая просто указывает не определять MX_COMPAT_32
. Итак, в Visual Studio вам не нужно ничего делать, так как это не определено по умолчанию. Если вы хотите противоположное поведение (-compatibleArrayDims
), определите MX_COMPAT_32
в разделе «Препроцессор».
Для чего нужен libut.lib?
Я включил libut.lib, который предоставляет несколько полезных функций для обнаружения разрыва (CTRL-C) внутри MEX-файла. Соответствующие заявления (хотя это уже не по теме):
// prototype the break handling functions in libut (C library)
extern "C" bool utIsInterruptPending();
extern "C" void utSetInterruptPending(bool);
person
chappjc
schedule
10.12.2014