前言
过去构建 Maya C++ 插件是按照 Autodesk 官方提供的流程,在 VS 里面配置项目工程。 参考链接
通过配置 devkit 的 pluginwizard 来构建项目。
但是使用 VS 配置 Maya 依赖的头文件和 lib 其实挺不方便的。


依赖和修改都在不同选项里面,配置起来要搞半天。
而且这个工程配置只能兼容 Windows ,如果我们要在 Linux 环境下编译,整个流程又完全不一样了。
其实解决这种问题,有专门的工具去做。
这就是 CMake
通过 cmake 配置可以生成不同平台的工程文件,不需要打开 IDE 就可以调用 compiler 编译结果。
https://github.com/volodinroman/CMakeMaya
这个仓库是别人配置好的基于 CMake 构建 Maya 插件的仓库。
Doit 自动构建环境
但是构建编译环境还是挺麻烦的,一方面需要下载 VS 和 CMake
另外还要配置好 Maya 提供的 SDK
https://github.com/FXTD-ODYSSEY/CMakeMaya
我这个仓库提供了懒人包环境,只需要配置有 Python 环境和poetry 库。
在仓库的目录,执行poetry install和poetry shell就可以进入开发虚拟环境。(注: 需要管理员权限)
poetry 会自动安装配置好的依赖,包括doit 框架
执行doit init会调用choco安装 VS 的依赖,以及 CMake
这个过程需要等待一段时间。
执行完之后 VS Build Tool 就添加到系统了。
但还是找不到 C++ compiler ,需要手动打开 installer 下载 C++ CMake 开发包。

使用
doit SDK -v 2020会下载 Maya 官方的 devkit 到仓库的 SDK 目录。
准备好环境之后,还需要安装好 maya 2020
如此就是完备的编译环境,只需要用doit c执行 cmake 编译命令来编译 C++ 插件。
1 | doit c -p weightDriver -v 2020 |
使用 -p 可以指定编译的项目,-v 可以指定编译的 Maya 版本,默认不指定会编译全部项目的 2020 版本
-p 支持完整的projects 相对路径或者最终目录指定
1 | doit c -p IngoClemens/weightDriver |
执行 doit 的时候会用 python 识别将末端目录变成完整的相对目录

下面是完整执行编译的流程

doit 背后执行的是 拼接输入 执行 cmake 命令
1 | cmake -Wno-dev -G "Visual Studio 16 2019" -DMAYA_VERSION={version} -DMAYA_PROJECT={project}. -B build |
DMAYA_VERSION 指定 Maya 版本号
DMAYA_PROJECT 指定 Maya 项目,多个项目可以用 ; 分割。
这个命令会读取根目录的 CMakeLists.txt 根据 VS2019 的配置生成 sln 文件到 Build 目录。
windows 下如果需要 Debug 也可以用 VS 打开 sln 去配置 Debug 工具。
1 | cmake --build build --config Release |
后面会执行 build 命令根据配置编译输出到指定目录。
中文乱码坑
Window Terminal 默认不支持 MSBuild 的字符输出。

需要在 terminal 上执行
chcp 65001切换字符集。
添加新工程
如果需要添加自己的 mll 需要自己填充 CMakeLists.txt 配置
使用doit new可以快速生成 插件 编译模板
cmake 配置说明
projects 下每个项目目录都有对应的 CMakeLists.txt
1 | # 设置输出目录 |
大部分的结构如上图,默认模板如上。
我加上了注释说明。
MAYA_PLUGIN方法将 mll 的initializePluginuninitializePlugin两个方法暴露出来(Maya 加载用),并且将 dll 的后缀改为 mll。
用 CMake 编译 Devkit 的案例代码
上面提到的 CMake 是基于 https://github.com/volodinroman/CMakeMaya 的方案搭建的。
cmake 文件基本上是自己编写,可以控制每一处的细节。
其实 Maya 的 Devkit 也提供了一套 CMake 的方案。
每个插件都保留了 CMakeLists.txt 用于编译。
如何顺利编译 Maya C++ 的案例插件是一个好问题。
我过去看 Maya 的文档但是因为不会折腾这个编译(编译出错不知道怎么解决) ,导致无法深入学习 C++ 插件。
只能拿 Devkit 提供的 Python 文件进行学习。
通过上面的折腾与学习,自己也算是对 CMake 有了基础的入门,终于有能力搞定这个问题了~
上面的链接是官方文档提供的一个 Maya 插件最简案例。
相应的代码在devkit\plug-ins\helloCmd找到

1 | cmake_minimum_required(VERSION 2.8) |
构建插件的 cmake 代码如上,核心部分是
$ENV{DEVKIT_LOCATION}通过环境变量获取 Devkit 的路径
所以执行 CMake 之前可以配置一下环境变量。
1 | set DEVKIT_LOCATION=F:\maya_devkit\devkitBase |

如此操作,就可以编译出 mll 了。(前提是要配置好 VS 的环境)
总结
这个环境我通过 虚拟机 测试过,在 win10 环境是没有问题。
通过 cmake 配置可以快速构建好 C++ 编译环境,比起以前折腾 VS 来方便太多了。
利用choco来安装依赖也解决了各种缺库导致起不来的问题。
通过这个人懒人包可以极大降低 Maya 写 C++ 的难度。
2022-7-8 补充说明
最近利用 submodule 添加了很多社区的 C++ 库。
clone 仓库之后需要用执行git submodule update --init来拉取 submodule
一些注意事项请参阅 readme 文档





