前言
过去构建 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 的initializePlugin
uninitializePlugin
两个方法暴露出来(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 文档