Gismo库的安装与配置(Windows篇)

由于最近正好想将环境中的Gismo库更新到最新版,需要将Gismo库重新编译一下,正好写下系列文章对Gismo库在不同环境下的安装与配置过程进行简单的介绍。

一、环境需求

  1. Visual Studio 2022(2017、2019亦可,本文用以2022版做演示)
  2. CMake
    于CMake官网(https://cmake.org/download)下载最新版中Windows x64安装程序并执行安装步骤即可

注意:可以在终端中输出cmake --version以检查是否在安装过程中将CMake添加到环境变量中,如若不然,需要在CMake安装路径下找到cmake.exe所在的bin目录,将其添加到环境变量中,应用后重启终端进行检测。

二、源代码获取

我们首先进入Gismo库的GitHub页面(https://github.com/gismo/gismo
Gismo库GitHub页面
点击右上角Code按钮弹出下拉页面,如果环境中安装了git,可以复制下红框中的链接,在一个指定的文件夹(源代码将下载在这个文件夹中)中打开终端,并输入

git clone https://github.com/gismo/gismo.git

其中中最后的链接即为刚才复制的链接。
但是这个过程可能由于网络问题导致clone失败,如果环境中未安装git或者使用git无法clone的,可以点击最后一个红框中的Download ZIP下载源代码压缩文件,下载后解压出来即可。
克隆下来的文件夹名称为gismo,下载压缩包解压出来的文件夹名称为gismo-stable,我这里是执行克隆过程得到的源代码文件夹gismo,下面统一以此进行讲述,如理解不便,可自行将文件夹gismo-stable名称修改为gismo.

三、Gismo库的构建与安装

首先要记下你刚刚获取的源代码的储存路径,我这里是D:\MyProject\GitHub\gismo.
在任意路径下创建一个文件夹gismo-build,这里将储存后续构建的过程文件,建议创建在源代码文件夹的附近便于你能找到它,我这里是D:\MyInclude\cpp\LibBuild_workspace\gismo-build.

1. 使用cmake-gui生成

我们打开刚才CMake(cmake-gui),分别填入这两个路径,并点击左下角的Configure

在弹出窗口的第一个框中选择生成器(如VS 2022选择Visual Studio 17 2022),点击Finish.

经过短暂等待得到如图所示的CMake缓存

这里注意,我们首先要将的变量CMAKE_BUILD_TYPE的值修改为Release(当然如果你需要构建Debug模式的库修改为Debug即可),然后取消GISMO_BUILD_EXAMPLES的勾选(如果勾选了则会额外构建一些实例程序,会耗费更多的时间)。
还有一个可选择性修改的变量CMAKE_INSTALL_PREFIX,这个是后续进行安装时的安装路径,可以选择使用它的默认路径,也可根据自己喜好进行修改,这里我修改为了D:\MyInclude\cpp\gismo\Release.
修改好后点击Generate生成

待下方输出框中出现Generating done即为生成完毕

2. 库的构建

gismo-build文件夹中打开终端(请回忆一下它的路径),当然如果你不知道如何打开终端,你可以尝试一下在文件夹中空白处点击鼠标右键,在下拉选项中点击“在终端中打开”
在终端中输入命令

cmake --build . --config Release

回车执行

接下来耐心等待即可,这个过程需要一定的时间

3. 库的安装

构建完毕后执行命令进行安装

cmake --install . --config Release


此时进入你的安装路径中会发现之前的空文件夹中多出了四个文件夹,gismo库已成功安装

  • bin\中包含gismodll文件,如果前面的生成过程中勾选了GISMO_BUILD_EXAMPLES,则会包含所有示例项目对应的可执行程序(.exe文件)
  • include\中包含gismo的所有头文件
  • lib\中包含gismolib文件和一些cmake文件
  • share\中包含示例程序的数据文件,如果没有编译示例程序则无需用到这里面的文件

最后,如果你在前面将gismo的安装路径修改为了自定义的路径,且后续计划用CMake来配置使用gismo的项目,那么你还需要设置一个环境变量gismo_DIR,值为lib\的路径,如D:\MyInclude\cpp\gismo\Release\lib,这是为了让你的CMake项目能够通过这个路径下的cmake文件找到gismo库。(如果你只是在VS中使用,可以无需进行这一步)

四、如何将Gismo库配置到项目中

1. 直接在VS项目属性中配置

创建一个VS项目,添加一个源文件,并在其中写入简单的测试代码

#include <gismo.h>

using namespace gismo;

int main(int, char**)
{
    gsInfo.precision(3);
    gsKnotVector<>   kv(-1, 0, 3, 3, 1);
    gsBSplineBasis<> bsp(kv);
    gsInfo << bsp.detail() << "\n";
    bsp.uniformRefine();
    gsInfo << bsp.detail() << "\n";
    return 0;
}

注意要将红框中的配置设置为Release模式,因为我们的gismo库也是在Release模式下构建的,如果想在Debug模式下使用则需构建Debug模式的库
可以看到代码中充斥着各种报错,因为我们还没有将gismo库配置进来

右键点击左边的解决方案gismoTest,下拉框中点击属性,在属性页中依次进行以下三项修改:

  1. “C/C++” -> “常规” -> “附加包含目录” 中添加include\gismo\路径,这里为D:\MyInclude\cpp\gismo\Release\include\gismo
  2. “链接器” -> “常规” -> “附加库目录” 中添加lib\路径,这里为D:\MyInclude\cpp\gismo\Release\lib
  3. “链接器” -> “输入” -> “附加依赖项” 中添加gismo.lib

修改完属性后点击确定,并将gismobin\目录中的gismo.dll复制到此项目源文件所在路径下(即main.cpp所在路径)
此时程序便能够成功运行

注意:附加依赖项中可以添加gismo.libgismo_static.lib,分别表示动态库和静态库,如果添加动态库则需要复制gismo.dll到项目中,添加静态库则不需要

2. 用CMake配置使用gismo的项目

引入

主观上讲我更加喜欢用CMake来配置项目,对我来讲这可能更加清晰(仅代表个人),当然如果想要理解后面配置过程,可能需要有一定的CMake基础。
CMake可以在终端中执行,也有可视化窗口(cmake-gui),一些常见编辑器也有相关插件适配(如 VSCode),其实我更推荐 VSCode+CMake插件 的方案来配置项目(有一些更加便捷的按钮),考虑到普适性,这里我在终端中执行CMake命令。

配置过程

首先在任意一个你喜欢的位置新建一个文件夹,在文件夹中新建两个文件CMakeLists.txtmain.cpp

注意:第一个文件CMakeLists.txt文件名必须完全一致,第二个文件main.cpp为项目源文件,文件名可以修改


在文件CMakeLists.txt中写入如下内容

cmake_minimum_required(VERSION 3.20.0)
project(gismoTest) #项目名

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #设置可执行程序输出路径

find_package(gismo REQUIRED) #搜索gismo库
if(gismo_FOUND)
    message(STATUS "gismo found: ${gismo_DIR}")
    include_directories(${GISMO_INCLUDE_DIRS}) #设置附加包含目录
    link_directories(${GISMO_LIBRARY_DIR}) #设置附加库目录
endif()

add_executable(gismoTest main.cpp)
target_link_libraries(gismoTest PUBLIC gismo) #将目标链接到gismo动态库,如果链接静态库则将gismo修改为gismo_static

在文件main.cpp中写入测试代码

#include <gismo.h>

using namespace gismo;

int main(int, char**)
{
    gsInfo.precision(3);
    gsKnotVector<>   kv(-1, 0, 3, 3, 1);
    gsBSplineBasis<> bsp(kv);
    gsInfo << bsp.detail() << "\n";
    bsp.uniformRefine();
    gsInfo << bsp.detail() << "\n";
    return 0;
}

两个文件修改并保存后,在此路径中打开终端,依次执行

cmake -B build
cmake --build build --config Release


此时会发现文件夹中新增了两个文件夹build\bin\,将gismobin\目录中的gismo.dll复制到此项目的bin\Release\中(即gismoTest.exe所在路径),继续在终端中执行

cd bin\Release
.\gismoTest.exe

即可成功运行项目生成的可执行程序