我正在尝试使用 cmake 编译在Maya API中找到的示例插件以创建 Visual Studio 2012 项目。但是,在编译 Maya 附带的库时似乎存在许多问题。第一个问题是库试图弥补一些旧的缺失 bool 实现,这是通过添加预处理器定义来解决的
add_definitions(-D _BOOL)
到 cmake 文件。
他们库中的下一个错误是它尝试访问 std::ostream 但无法在“std”中找到它的问题,这是使用 cmake 中的另一个定义解决的:
add_definitions(-D REQUIRE_IOSTREAM)
这导致了一个我无法解决的最终错误,我都用谷歌搜索了它,查看了 stackoverflow 并查看了 Maya 附带的示例 VSproject 文件,但无法解决它。错误(共 18 个)源于链接器,并且都是未解析的外部符号,例如错误:
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" (__imp_??0MStatus@@QAE@W4MStatusCode@0@@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" (?doIt@hello@@UAE?AVMStatus@@ABVMArgList@@@Z) C:\path\mayacmake_sample\helloworld.obj Sample_helloworld
编辑: 使用 Andreas 的修改后的 cmakelist 并没有产生任何区别:嘿,感谢您的回复,但我仍然遇到很多未解决的外部错误:
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" (__imp_??0MStatus@@QAE@W4MStatusCode@0@@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" (?doIt@hello@@UAE?AVMStatus@@ABVMArgList@@@Z) D:\mayacmake_sample\helloworld.obj Maya_Sample_Plugin
Error 13 error LNK2001: unresolved external symbol "public: virtual bool __thiscall MPxCommand::hasSyntax(void)const " (?hasSyntax@MPxCommand@@UBE_NXZ) D:\mayacmake_sample\helloworld.obj Maya_Sample_Plugin
我删除了其他错误,因为它们看起来与上面的两个相同。我确保修改了 cmake 文件中的路径以适合我的安装,它现在看起来如下:
cmake_minimum_required (VERSION 2.6)
SET(MAYA_PLUGIN_NAME "Maya_Sample_Plugin")
SET(MAYA_DIRECTORY "C:/Program Files/Autodesk/Maya2013")
SET(MAYA_HEADERS_DIR "${MAYA_DIRECTORY}/include")
SET(MAYA_LIBRARY_DIR "${MAYA_DIRECTORY}/lib")
SET(SOURCE_FILES
helloworld.cpp
)
source_group("" FILES ${SOURCE_FILES})
INCLUDE_DIRECTORIES(
${MAYA_HEADERS_DIR}
${Boost_INCLUDE_DIR}
)
LINK_DIRECTORIES(
${MAYA_LIBRARY_DIR}
)
SET(LIBRARIES
Foundation.lib
OpenMaya.lib
OpenMayaAnim.lib
OpenMayaUI.lib
)
SET(MAYA_DEFINITIONS _AFXDLL _MBCS NT_PLUGIN REQUIRE_IOSTREAM _BOOL)
ADD_LIBRARY(${MAYA_PLUGIN_NAME} SHARED ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(${MAYA_PLUGIN_NAME} ${LIBRARIES})
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES COMPILE_DEFINITIONS "${MAYA_DEFINITIONS}")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES OUTPUT_NAME "${MAYA_PLUGIN_NAME}")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES SUFFIX ".mll")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
在这件事上的任何帮助都是值得的。