Gismo库的安装与配置(Windows篇)
由于最近正好想将环境中的Gismo库更新到最新版,需要将Gismo库重新编译一下,正好写下系列文章对Gismo库在不同环境下的安装与配置过程进行简单的介绍。
一、环境需求
- Visual Studio 2022(2017、2019亦可,本文用以2022版做演示)
- CMake
于CMake官网(https://cmake.org/download)下载最新版中Windows x64安装程序并执行安装步骤即可
注意:可以在终端中输出cmake --version
以检查是否在安装过程中将CMake
添加到环境变量中,如若不然,需要在CMake
安装路径下找到cmake.exe
所在的bin
目录,将其添加到环境变量中,应用后重启终端进行检测。
二、源代码获取
我们首先进入Gismo库的GitHub页面(https://github.com/gismo/gismo)
点击右上角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\
中包含gismo
的dll
文件,如果前面的生成过程中勾选了GISMO_BUILD_EXAMPLES
,则会包含所有示例项目对应的可执行程序(.exe
文件)include\
中包含gismo
的所有头文件lib\
中包含gismo
的lib
文件和一些cmake
文件share\
中包含示例程序的数据文件,如果没有编译示例程序则无需用到这里面的文件
最后,如果你在前面将gismo
的安装路径修改为了自定义的路径,且后续计划用CMake
来配置使用gismo
的项目,那么你还需要设置一个环境变量gismo_DIR
,值为lib\
的路径,如D:\MyInclude\cpp\gismo\Release\lib
,这是为了让你的CMake
项目能够通过这个路径下的cmake
文件找到gismo
库。(如果你只是在VS中使用,可以无需进行这一步)
注意:修改(添加)了环境变量后,需要开启一个新的终端才能在里面应用修改(修改前开启的终端中该环境变量仍是原值)
终端中查看环境变量
- 在cmd中,执行
echo %变量名%
,如echo %gismo_DIR%
- 在powershell中,执行
$env:变量名
,如$env:gismo_DIR
四、如何将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
,下拉框中点击属性,在属性页中依次进行以下三项修改:
- “C/C++” -> “常规” -> “附加包含目录” 中添加
include\gismo\
路径,这里为D:\MyInclude\cpp\gismo\Release\include\gismo
- “链接器” -> “常规” -> “附加库目录” 中添加
lib\
路径,这里为D:\MyInclude\cpp\gismo\Release\lib
- “链接器” -> “输入” -> “附加依赖项” 中添加
gismo.lib
修改完属性后点击确定,并将gismo
的bin\
目录中的gismo.dll
复制到此项目源文件所在路径下(即main.cpp
所在路径)
此时程序便能够成功运行
注意:附加依赖项中可以添加
gismo.lib
或gismo_static.lib
,分别表示动态库和静态库,如果添加动态库则需要复制gismo.dll
到项目中,添加静态库则不需要
2. 用CMake配置使用gismo的项目
引入
主观上讲我更加喜欢用CMake
来配置项目,对我来讲这可能更加清晰(仅代表个人),当然如果想要理解后面配置过程,可能需要有一定的CMake
基础。
CMake
可以在终端中执行,也有可视化窗口(cmake-gui
),一些常见编辑器也有相关插件适配(如 VSCode),其实我更推荐 VSCode+CMake插件 的方案来配置项目(有一些更加便捷的按钮),考虑到普适性,这里我在终端中执行CMake
命令。
配置过程
首先在任意一个你喜欢的位置新建一个文件夹,在文件夹中新建两个文件CMakeLists.txt
、main.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\
,将gismo
的bin\
目录中的gismo.dll
复制到此项目的bin\Release\
中(即gismoTest.exe
所在路径),继续在终端中执行
cd bin\Release
.\gismoTest.exe
即可成功运行项目生成的可执行程序