“无用”的前言

《初步了解 make 的基础并尝试使用》《研究HDK(Houdini Development Kit):使用CMake自动生成VS工程》中,我描述了我对“make”的学习和试用其配置一个HDK的工程。

但当我现在需要配置一个新工程时,回来参考这两篇博客时,我发现其中有很多“无用的废话”。所谓的“废话”其实是配置工程中一些错误的尝试或者延伸的思考,当然并非无用,但当我只需要知道 “如何配置一个新的HDK工程” 时,就会发现博客中记录的内容很多是不需要关心的。

因此我想用最简单的描述重新总结一下 “配置一个HDK工程的通用步骤”


本篇将分为:

  • 【环境准备】 描述了在第一次配置工程中需要做的步骤。之后不需要再做。
  • 【创建新工程步骤】 描述了每次创建新工程时都需要重复的步骤。
  • 【Trouble Shooting】 记录了一些问题的解决方式。

环境准备

1.HDK包含在Houdini中

HDK包含在Houdini安装目录中,只要从官网上下载Houdini即可拥有HDK了。

2.CMake

官网上下载CMake:

deadline 设置houdini版本 houdini 配置_解决方案


如果一切正常,应该能完成《初步了解 make 的基础并尝试使用》中【3.1~3.3】的小实验。

如果出问题,可以查阅文末【Trouble Shooting】的【1】

创建新工程步骤

1.准备源代码

首先准备源代码,一般来自于HDK中的范例(Houdini安装目录\toolkit\samples)。

最后形成这样的目录结构:

deadline 设置houdini版本 houdini 配置_解决方案_02


其中,源代码和CMakeLists.txt都放在工程目录的src下。

2.编辑 CMakeLists.txt

模板如下:

cmake_minimum_required( VERSION 3.6 )

# 解决方案名:
project( HDK_Project )

# 请将此目录替换为本机Houdini的安装目录(注意为斜杠"/"不是"\")
list( APPEND CMAKE_PREFIX_PATH "C:/Program Files/Side Effects Software/Houdini 18.5.408/toolkit/cmake" )

# Locate Houdini's libraries and header files.
# Registers an imported library target named 'Houdini'.
find_package( Houdini REQUIRED )

# 将要生成的库的名字:
set( library_name DM_BackgroundHook )

# 根据代码中是否有内嵌的DS文件来选择是启用还是注释掉:
#houdini_generate_proto_headers( FILES 源代码.C )

# 添加代码文件:
add_library( ${library_name} SHARED
    DM_BackgroundHook.C
)

# Link against the Houdini libraries, and add required include directories and
# compile definitions.
target_link_libraries( ${library_name} Houdini )

# Include ${CMAKE_CURRENT_BINARY_DIR} for the generated header.
target_include_directories( ${library_name} PRIVATE
    ${CMAKE_CURRENT_BINARY_DIR}
)

# Sets several common target properties, such as the library's output directory.
houdini_configure_target( ${library_name} )

需要做以下改动:

deadline 设置houdini版本 houdini 配置_houdini_03

1)修改解决方案名(如果有必要)

deadline 设置houdini版本 houdini 配置_解决方案_04


此名字将为生成的.sln文件的名字

2)填写HDK目录中cmake文件夹的路径

注意为斜杠/不是\

deadline 设置houdini版本 houdini 配置_CMake_05

3)指定 库(dll) 的名字

deadline 设置houdini版本 houdini 配置_CMake_06


此为生成的.vcxproj文件的名字,也为最终生成dll文件的名字。

4)看是否需要houdini_generate_proto_headers

如果源代码中有内嵌的DS文件,例如:

deadline 设置houdini版本 houdini 配置_houdini_07


则需要:

# Code generation for the embedded DS file in SOP_Star.C.
houdini_generate_proto_headers( FILES SOP_Star.C )

否则就不需要

5)添加源代码

deadline 设置houdini版本 houdini 配置_houdini_08

3.使用CMake

3.1 设定目录

设定src与build目录:

deadline 设置houdini版本 houdini 配置_cmake_09


随后点Configure进行配置

3.2 配置

设定当前VisualStudio的版本,和x64为平台:

deadline 设置houdini版本 houdini 配置_houdini_10


随后点Finish。如果有问题则会出现红字,没问题的话则最后显示完成:

deadline 设置houdini版本 houdini 配置_cmake_11


(不用担心红色的条框,再点一下“Configure”即可消除红色)

3.3 生成

点击Generate即可完成生成

deadline 设置houdini版本 houdini 配置_DM_12


生成工程在build目录:

deadline 设置houdini版本 houdini 配置_cmake_13

4. 使用VS

右键项目点生成

deadline 设置houdini版本 houdini 配置_CMake_14


即可发现dll被放到正确的位置

Trouble Shooting

1.Cmake找不到VisualStudio

有可能VS中的CMake的组件没安装,安装步骤如下:

打开VS的安装器:

deadline 设置houdini版本 houdini 配置_cmake_15


然后点修改

deadline 设置houdini版本 houdini 配置_houdini_16


单个组件下找到用于 CMake 的Visual C++ 工具,确保它是勾选的,然后点右下角修改

deadline 设置houdini版本 houdini 配置_DM_17

2. 由于版本问题编译不过

deadline 设置houdini版本 houdini 配置_cmake_18


我在用VS2019编译“DM_BackgroundHook”这个范例时编译不过(Houdini版本 18.0.348

随后换了更高级的Houdini版本18.5.408就没了问题。

或许以后遇到类似问题时可以尝试切换VS或者Houdini的版本。