为了能更好的在VC里面引入CUDA做Houdini API的开发,能便高效率的使用VisualStudio的集成开发环境工具是必须的。默认的Houdini插件与节点的开发都是写完了*.C代码之后,使用命令行下的Hcustom命令完成自定义插件和节点的编译,但这样的流程并不方便,而且对于较大的工程管理也有难度。同时我也不熟悉Makefile文件的书写,要是调用很多诸如OpenGL,MPI,BOOST的这样的API或库工具包做开发,Hcustom使用起来就更不方便了,如果可以直接在VC的窗口里面进行debug,那很多开发工作会方便很多。
PS:其中我居然才发现Linux系统上文件的文件名称是区分大小写的,*.c是c文件,*.C就是C++文件,使用gcc编译HoudiniCustomNode源文件的时候,识别到*.C的时候就认定为C++编译了。而Windows上不分文件字母大小写,所以VC编译过程中就吧*.C当成C代码去编译了。。
我在Cmd里面追踪了一下 Hcustom和Hcompiler的附加命令,Hcustom在Houdini安装目录的bin文件夹下,主要完成2个任务,1个是添加用于HoudiniCustomNode编译的,编译器命令行指令,比如-D是定义宏,-I定义引入库的搜索路径,第二个任务是将指令传递给Hcompiler,Hcompiler调用VC的编译工具,完成最终DLL文件的编译和连接。顺便我也查阅了官方makefile文件。
--------------------------------------------------------------------------------
Options:
-d Display CFLAGS environment variable passed to hcompile
-g Create debug version of the DSO
-i dir Specify an install directory (default HOME\houdini9.5\dso)
-s Create a stand alone application instead of a DSO
-l libname Link with the library named libname; libraries are passed to the compiler in the order in which they are given
-L libdir Add libdir to the library file search path
-I incdir Add incdir to the include file search path
-t Turn off creation of tagging information. At least one object file in an archive must have the tagging information for Houdini to load the .dll successfully
--------------------------------------------------------------------------------
以上这个是Hcustom的编译说明~~~
然后,下面这些是cmd上追踪出来的Hcustom 命令:
Making DEBUG version
Making STANDALONE version
Linking with 'libname'
Making 'SOP_SParticle.o' from 'SOP_SParticle.C'
CFLAGS = -TP -Zc:forScope
-DVERSION="9.5.375"
-DI386
-DWIN32
-DSWAP_BITFIELDS
-DDLLEXPORT=__declspec(dllexport)
-DUT_ASSERT_LEVEL=2
-I "incdir"
-I "D:/Program Files (x86)/Microsoft Visual Studio 8/VC/include"
-I "D:/Program Files (x86)/Microsoft Visual Studio 8/VC/PlatformSDK/include"
-I "D:/PROGRA~2/SIDEEF~1/HOUDIN~1.375/toolkit/include/htools"
-I "D:/PROGRA~2/SIDEEF~1/HOUDIN~1.375/toolkit/include"
-Od
-Z7
-MD
-EHsc
-GR
-DSESI_LITTLE_ENDIAN
-Fo"SOP_SParticle.o"
-link /libpath:"D:/Program Files (x86)/Microsoft Visual Studio 8/VC/lib/amd64"
libpath:"D:/Program Files (x86)/Microsoft Visual Studio 8/VC/PlatformSDK/lib/amd64"
libpath:"libdir""libname"
"D:/PROGRA~2/SIDEEF~1/HOUDIN~1.375/custom/houdini/dsolib/*.a"
"D:/PROGRA~2/SIDEEF~1/HOUDIN~1.375/custom/houdini/dsolib/*.lib"
-out:"dir/SOP_SParticle.exe"
不少东西的写法和Makefile文件写法不太一样,是Hcompiler的格式,有很多编译时候的信息被具体化了,如编译这个SOP_SParticle节点时候具体调用到的静态库。
Hcustom和Hcompiler的东西其实也不过是个批处理了,dll文件的编译和连接原理和步骤都是一样的。
在VC里面重新按照上面追踪出来的内容完成项目工程的设置,就可以实现在VC的窗口中完成Houdini的自定义节点和DLL文件的编译与连接了。或者cl命令行下写这个MakeFile文件
--------------------------------------------------------------------------------
下面这个是Houdini用于VC的MakeFiles文件:
CC = $(MSVCDir)/bin/cl -TP -MD -GX -GR -Zc:forScope -c
LINK = $(MSVCDir)/bin/link
HDEFINES =
-DVERSION ="9.5.375"
-DI386
-DWIN32
-DSWAP_BITFIELDS
-DDLLEXPORT="__declspec(dllexport)"
-DSESI_LITTLE_ENDIAN
HLIBINC = -LIBPATH:$(HFS)/dsolib
HLIBS = $(HFS)/custom/houdini/dsolib/*.a
SYSLIBINC = -LIBPATH:$(MSVCDir)/lib
-LIBPATH:$(MSVCDir)/PlatformSDK/lib
SYSLIBS = INCINC = $(INCDIRS)
-I$(HFS)/toolkit/include -I$(HFS)/toolkit/include/htools
-I$(MSVCDir)/include -I$(MSVCDir)/PlatformSDK/include
SHAREDFLAG = -DLL
BJOUTPUT = -Fo
DSOOUTPUT = -out:
SAOUTPUT = -out:
BJFLAGS = $(HDEFINES) $(INCINC) $(WFLAGS) $(OPTIMIZER)
DSOFLAGS = $(SYSLIBINC) $(LIBDIRS) $(LIBS) $(SYSLIBS) $(HLIBINC) $(HLIBS)
SAFLAGS = $(DSOFLAGS)
用这段Makefile文件,在Visual Studio 的cl命令行窗口下就可以做Houdini的Custom和DSO的编译工作了。编译完成DLL之后,将编译好的DLL文件复制到Houdini的DSO搜索目录下,启动Houdini就可以使用节点了。
也可以在Hbatch或者textport下用DSOVersion命令查找。Makefile里面文件命令定义比较琐碎。但好在MSDN上都写了,我现在正在查阅所有命令的帮助,回头还有部分VC窗口中的连接问题,解决后再在VC的窗口中编译Houdini的DSO就基本上非常完好了。
文章来源:http://blog.csdn.net/DingXun/archive/2009/03/03/3948240.aspx
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22785983/viewspace-619772/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22785983/viewspace-619772/