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

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.mrgr.cn/news/12845.html

相关文章:

  • Oracle Linux 7.9 安装minikube体验
  • C++中 inline 的含义是什么?
  • iptables笔记汇总
  • centos 部署 scrapy 爬虫详细教程
  • [论文笔记] LLM-ICL论文:AI模型对prompt格式分隔符的敏感性——结构化Prompt格式
  • 报表融合大屏,做不一样的财务分析!
  • 不可不知的DP协议过往史
  • vue el-tree主键id重复 添加自增id 以及原相同节点同步勾选 同步操作
  • 关于技术专项工作的梳理和总结
  • UDP是什么?UDP攻击为什么这么大?该如何防范?
  • vue使用vite配置跨域以及环境配置详解
  • Linux磁盘操作之du命令
  • 基于数据挖掘的心力衰竭疾病风险评估系统
  • WHAT - 通过 react-use 源码学习 React(Lifecycles 篇)
  • RTC相关
  • ASP.NET Core 入门教程三 结合 EFCore 和 SQLite
  • 苹果手机死机无法操作,试试这2种解决办法
  • 趣味算法------拯救阿拉德大陆
  • Linux云计算 |【第二阶段】SHELL-DAY1
  • 尚庭公寓学习笔记