构建OpenSceneGraph库的步骤和经验总结

在构建了zlib、libpng、libjpeg、libtiff、giflib以及freetype等库之后,接下来将介绍如何构建OpenSceneGraph(OSG)这一大型库。OSG是一款高性能、跨平台的三维图形应用程序框架,广泛应用于科学可视化、模拟仿真和游戏开发等领域。尽管上述几个库不是OSG的必须依赖库,但将它们作为依赖库构建后,OSG的功能将更加完善。

构建OSG库的关键指令如下所示:


# 配置CMake      
cmake .. -G "$Generator" -A x64 `
    -DCMAKE_BUILD_TYPE=RelWithDebInfo `
    -DCMAKE_PREFIX_PATH="$InstallDir" `
    -DCMAKE_INSTALL_PREFIX="$InstallDir" `
    -DGIFLIB_LIBRARY="$InstallDir/lib/giflib.lib" `
    -DBUILD_OSG_APPLICATIONS=ON `
    -DBUILD_OSG_EXAMPLES=OFF `
    -DBUILD_OSG_DEPRECATED_SERIALIZERS=OFF `
    -DCMAKE_RELWITHDEBINFO_POSTFIX=""

# 构建阶段,指定构建类型
cmake --build . --config RelWithDebInfo -- /m:8

# 安装阶段,指定构建类型和安装目标
cmake --build . --config RelWithDebInfo --target install

优先找到提前编译好的依赖库需要设置CMAKE_PREFIX_PATH变量。将所有库安装到同一个目录并设置成CMAKE_PREFIX_PATH变量,以便在构建新的依赖库时,CMake能准确查找相关依赖库。然而,仍可能出现少数依赖库未能被发现,比如GIFLIB,因此需要手动设置GIFLIB_LIBRARY。

  1. BUILD_OSG_APPLICATIONS确定是否构建基于OSG的可执行程序,例如osgviewer、osgconv等。这样的应用工具非常实用,建议进行构建。
  2. BUILD_OSG_EXAMPLES表示是否构建示例程序。为了加快构建速度,一般不会进行构建。
  3. BUILD_OSG_DEPRECATED_SERIALIZERS中的DEPRECATED表示不需要参与构建,因此这项也是非必须的。
  4. CMAKE_RELWITHDEBINFO_POSTFIX用于决定RelWithDebInfo方式编译结果的后缀。此处将其设置为空。

构建像OSG这样的大型程序库时,建议多关注CMake配置完成后的输出信息。输出的繁杂信息包括有的依赖库找不到,有的依赖库找到了,以及列出了找到的与未找到的依赖库。重点关注所需的依赖库是否被成功识别,因为大型库通常有许多依赖项,不太可能一次性准备好所有依赖项。

此外,可以查看程序库提供的自定义构建选项,将暂时用不到的选项设为OFF,如一些测试程序或案例程序。CMake提供的功能非常强大,有的功能甚至可以远程拉取代码,但国内网速可能会导致终端构建配置。因此,可以取消一些非必须的构建选项,然后重新进行构建。

综上所述,通过多阅读构建配置的输出信息和选项,积累经验后就能快速高效地构建依赖库了。

标签:游戏攻略