当前位置: 首页 > article >正文

CMake构建学习笔记9-Eigen库的构建

Eigen是一个高性能的C++线性代数库,广泛用于科学计算、机器学习、计算机视觉等领域。不过,Eigen有点特别,它是一个纯头文件实现的库;也就是说,任何一个程序要引入它,只要include它的头文件就可以了。这天然就规避了不同操作系统不同编译器造成的二进制兼容的问题,所有的实现都include源代码了,那还不是轻松跨平台?

像Eigen这种风格的库就被称为Header Only库。这种库使用起来确实太方便了,所以现在很多库都采取了这种设计。我们知道C/C++的声明和实现是分开的,所以使用起来相当的麻烦,相同的函数签名总是要写两次,然后把实现隐藏起来编译成静态库或者动态库。这种风格的库就完全不会有这个问题,include头文件就行。不过这种风格也不是没有缺点,比如增加了调用方的构建时间、构建成果体积增加、符号冲突、不能隐藏实现等,所以采用这种风格的库一般都是模板库。

Header Only库也并不意味着不需要构建,因为构建还是包含很多步骤的,使用CMake进行构建的关键指令如下:

# 配置CMake  
cmake .. -G "$Generator" -A x64 `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCMAKE_PREFIX_PATH="$InstallDir" `
-DCMAKE_INSTALL_PREFIX="$InstallDir" `
-DBUILD_TESTING=OFF

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

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

如果设置不构建测试程序,这个构建过程其实就是复制必须的头文件到安装目录。另外,还会生成一些.cmake格式的包配置文件到安装目录,这些文件是便于其他项目找到和使用这些Eigen的。不止Eigen,大多数CMake构建的库都会生成类似的包配置文件,这一点我们放在后续的文章中进行一步论述。


http://www.kler.cn/a/280263.html

相关文章:

  • MS COCO数据集目标检测评估(Detection Evaluation)
  • 什么是营销自动化?营销自动化的优势?
  • 云原生系列 - Nginx(高级篇)
  • 分享 11 个常用的 Nginx 性能优化参数工作
  • SQLite 插入数据并返回自增ID
  • MySQL索引(二)
  • vue侧边栏
  • 探索贪心算法:解决优化问题的高效策略
  • 【ragflow】查看Docker >= 24.0.0 Docker Compose >= v2.26.1是否满足
  • 大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
  • Linux驱动入门实验班——DAC模块驱动(附百问网视频链接)
  • 【Python】家庭用电数据分析Prophet预测
  • SpringCloud之一注册中心(Eureka)
  • 《逻辑学》傅皓政 课程笔记
  • Metasploit漏洞利用系列(八):MSF渗透测试 - PHPCGI漏洞利用实战
  • Comsol 声子晶体管路局域共振带隙与布拉格带隙
  • postgresql底层Driver驱动包数据库是怎么连接,怎么发送数据,怎么设置超时
  • JS将class转换为function
  • 联合唯一索引其中一个为Null,多条同样的数据为什么不会冲突
  • [Linux][软件]CentOS配置ssh免密码登录并解决仍然需要输入密码的问题