Houdini Development Kit ( HDK ) VC小記

洛欣發表於2009-11-16

為了能更好的在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章