Справка: VS2005 Компиляция * .m файла - PullRequest
5 голосов
/ 01 сентября 2011

все

У меня есть файл test.m (исходный код matlab), который реализует функцию A (); и файл main.cpp (вызовет A ()).

как вы знаете, мы можем выполнить следующие шаги:

  1. использовать matlab для компиляции test.m (mcc -), сгенерирует: test.dll, test.ctf, test.h.

  2. скопировать файл test.dll и test.ctf, test.h в проект VS2005. в main.cpp вызовите A () в test.dll.

Но когда я выпускаю программу, я также упаковываю test.dll вместе.

И еще, могу ли я использовать VS2005 для компиляции test.m и main.cpp, который будет генерировать только main.dll, main.ctf, main.h .. (я выпущу только main.dll, main. CTF, main.h,).

это означает, что я скомпилирую test.m в main.cpp.

И я попробовал этот путь в VS2005 ---> События сборки -> Событие предварительной сборки -> Командная строка: mcc C -w lib: test test.m

и он сгенерирует промежуточный файл test.ctf (только test.ctf, без test.dll). Но я не знаю, как скомпилировать test.ctf в main.cpp?

Кто-нибудь может мне помочь?

спасибо.

1 Ответ

1 голос
/ 01 сентября 2011

Вы можете сделать это наоборот и добавить свой main.cpp в процесс сборки matlab: я не знаю точного синтаксиса, но вы можете добавить свой main.cpp в mcc / mbuild, и он добавит егов dll для вас.При использовании deploytool в режиме графического интерфейса, просто перетащите файлы c / c ++ в область ресурсов, и они будут скомпилированы в DLL.Таким образом, у вас будет только одна dll, содержащая как код m, так и ваш собственный код на c ++.

Другой вариант, использующий приведенную выше стратегию: сначала попробуйте описанный выше, и посмотрите на вывод deploytool: он покажет вамИспользуемые командыСначала он вызывает mcc, затем mbuild, который в свою очередь вызывает cl (компилятор MS).Используйте точную команду, использованную для вызова mcc в качестве события перед сборкой, а затем добавьте эти выходные файлы в cl аналогично тому, как это делает mbuild (вы также можете увидеть в выводе, как это происходит).Таким образом, вы можете в любом случае использовать VS для создания одной dll, просто имитируя то, что делает процесс сборки matlab.

Тем не менее, я не уверен, насколько это выгодно для раздельного распределения этих двух.Также не забудьте, что вам нужно распространять всю MCR вместе с ней, иначе ваши клиенты не смогут запускать какой-либо код с использованием dll.

...