CMake-Cookbook 第0章 配置环境
文章目录
- 第0章 配置环境
- 0.1 获取代码
- 0.2 Docker镜像
- 0.3 安装必要的软件
- 0.3.1 获取CMake
- 0.3.2 编译器
- 0.3.3 自动化构建工具
- 0.3.4 Python
- 0.3.5 依赖软件
- 0.3.5.1 BLAS和LAPACk
- 0.3.5.2 消息传递接口(MPI)
- 0.3.5.3 线性代数模板库
- 0.3.5.4 Boost库
- 0.3.5.5 交叉编译器
- 0.3.5.6 ZeroMQ, pkg-config, UUID和Doxygen
- 0.3.5.7 Conda的构建和部署
- 0.4 测试环境
- 0.5 上报问题并提出改进建议
第0章 配置环境
- 主要内容
- 如何获取代码
- GNU/Linux、macOS和Windows 安装示例所需工具
- 自动化测试如何工作
- 报告问题,提出改进建议
0.1 获取代码
- git
git clone https://github.com/...git- 获取特定版本
--single-branch -b v1.0git clone --single-branch -b v1.0 https://github.com/...git
- 获取更新,选择库的master分支
0.2 Docker镜像
- Docker 环境搭建
$ docker run -it devcafe/cmake-cookbook_ubuntu-18.04
$ git clone https://github.com/dev-cafe/cmake-cookbook.git
$ cd cmake-cookbook
$ pipenv install --three
$ pipenv run python testing/collect_tests.py 'chapter-*/recipe-*'
0.3 安装必要的软件
- 主机操作系统安装依赖项,安装组件
-
- CMake
-
- 编译器
-
- 自动化构建工具
-
- Python
-
0.3.1 获取CMake
- GNU/Linux
$ cmake_version="3.5.2"
$ target_path=$HOME/Deps/cmake/${cmake_version}
$ cmake_url="https://cmake.org/files/v${cmake_version%.*}/cmake-${cmake_version}-Linux-x86_64.tar.gz"
$ mkdir -p "${target_path}"
$ curl -Ls "${cmake_url}" | tar -xz -C "${target_path}" --strip-components=1
$ export PATH=$HOME/Deps/cmake/${cmake_version}/bin${PATH:+:$PATH}
$ cmake --version
- Windows
- Visual Studio 2017 构建CMake项目
- 下载MSYS2安装程序,按说明更新包列表,用
pacman安装CMake
$ pacman -S mingw64/mingw-w64-x86_64-cmake
0.3.2 编译器
-
C++、C和Fortran 编译器
-
跨平台,并尽可能独立于操作系统(开源编译器)
-
GNU/Linux
$ sudo apt-get install g++ gcc gfortran -
Windows
$ pacman -S mingw64/mingw-w64-x86_64-toolchain
0.3.3 自动化构建工具
- 自动化构建工具:为项目提供构建和链接的基础设施,最终安装和使用什么,取决于操作系统
- GNU/Linux上,GNU Make
- macOS上,XCode将提供GNU Make
- Windows上,Visual Studio ;MSYS2 GNU Make作为mingw64/mingw-w64-x86_64工具链包的一部分
- 可移植性,尽量使示例不受系统相关细节影响;编译器固有特性:配置、构建和链接
- 自动化构建工具
- Ninja 适用于GNU/Linux、macOS和Windows
- 注重速度,贴别是增量重构
- Fortran
- 安装Ninja:
- Ninja 适用于GNU/Linux、macOS和Windows
$ mkdir -p ninja
$ ninja_url="https://github.com/Kitware/ninja/releases/download/v1.8.2.g3bbbe.kitware.dyndep-1.jobserver-1/ninja-1.8.2.g3bbbe.kitware.dyndep-1.jobserver-1_x86_64-linux-gnu.tar.gz"
$ curl -Ls ${ninja_url} | tar -xz -C ninja --strip-components=1
$ export PATH=$HOME/Deps/ninja${PATH:+:$PATH}
- windows MSYS2环境
$ pacman -S mingw64/mingw-w64-x86_64-ninja
0.3.4 Python
- Python安装
- 解释器、头文件和库
- Ubuntu 14.04 LTS
sudo apt-get install python3.5-dev
- Windows MSYS2环境
$ pacman -S mingw64/mingw-w64-x86_64-python3
$ pacman -S mingw64/mingw-w64-x86_64-python3-pip
$ python3 -m pip install pipenv
- 建议使用包管理器在隔离的环境中安装这些包
- 不影响系统环境下,进行包的清理/安装
- 没有管理员权限的情况下安装包
- 降低软件版本和依赖项冲突的风险
- 复现性,可更好地控制包地依赖性
Pipfile结合pipfile.lock使用Pipenv,创建独立环境安装所有包
$ pip install --user pip pipenv --upgrade
$ pipenv install --python python3.5
- 执行
pipenv shell进入一个命令行环境,包含特定版本Python和可用的包;执行exit退出当前环境;使用pipenv run在隔离环境中直接执行命令 - 将库中
requirements.txt文件与Virtualenv和pip结合使用
$ virtualenv --python=python3.5 venv
$ source venv/bin/activate
$ pip install -r requirements.txt
deactivate命令退出虚拟环境Conda环境,安装Miniconda
$ curl -Ls https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh > miniconda.sh
$ bash miniconda.sh -b -p "$HOME"/Deps/conda &> /dev/null
$ touch "$HOME"/Deps/conda/conda-meta/pinned
$ export PATH=$HOME/Deps/conda/bin${PATH:+:$PATH}
$ conda config --set show_channel_urls True
$ conda config --set changeps1 no
$ conda update --all
$ conda clean -tipy
- Windows 下载
Miniconda(或使用PowerShell安装)
$basedir = $pwd.Path + "\"
$filepath = $basedir + "Miniconda3-latest-Windows-x86_64.exe"
$Anaconda_loc = "C:\Deps\conda"
$args = "/InstallationType=JustMe /AddToPath=0 /RegisterPython=0 /S /D=$Anaconda_loc"
Start-Process -FilePath $filepath -ArgumentList $args -Wait -Passthru
$conda_path = $Anaconda_loc + "\Scripts\conda.exe"
$args = "config --set show_channel_urls True"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
$args = "config --set changeps1 no"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
$args = "update --all"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
$args = "clean -tipy"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
- 安装
Conda后,安装Python模块
$ conda create -n cmake-cookbook python=3.5
$ conda activate cmake-cookbook
$ conda install --file requirements.txt
- 执行
conda deactivate将退出conda的环境
0.3.5 依赖软件
0.3.5.1 BLAS和LAPACk
- Linux Ubuntu 14.04 LTS 安装BLAS和LAPACk
$ sudo apt-get install libatlas-dev liblapack-dev liblapacke-dev
- windows MSYS2环境
$ pacman -S mingw64/mingw-w64-x86_64-openblas
- 或者从GitHub下载 BLAS和LAPACk参考实现并从源代码编译库
0.3.5.2 消息传递接口(MPI)
- Ubuntu 14.04 LTS 安装
OpenMPI
$ sudo apt-get install openmpi-bin libopenmpi-dev
- 可以从
https://www.open-mpi.org/software/下载OpenMPI源码并编译
0.3.5.3 线性代数模板库
- GNU/Linux和macOS上安装
Eigen
$ eigen_version="3.3.4"
$ mkdir -p eigen
$ curl -Ls http://bitbucket.org/eigen/eigen/get/${eigen_version}.tar.gz | tar -xz -C eigen --strip-components=1
$ cd eigen
$ cmake -H. -Bbuild_eigen -
DCMAKE_INSTALL_PREFIX="$HOME/Deps/eigen" &> /dev/null
$ cmake --build build_eigen -- install &> /dev/null
0.3.5.4 Boost库
- Ubuntu 14.04 LTS
$ sudo apt-get install libboost-filesystem-dev libboost-python-dev libboost-test-dev
- Windows
- 二进制发行版 从
Boost网站 http://www.boost.org 下载 - https://www.boost.org 下载源代码编译
- 二进制发行版 从
0.3.5.5 交叉编译器
- 类Debian/Ubuntu系统,安装交叉编译器
$ sudo apt-get install gcc-mingw-w64 g++-mingw-w64 gfortran-mingw-w64
0.3.5.6 ZeroMQ, pkg-config, UUID和Doxygen
- Ubuntu 14.04 LTS
$ sudo apt-get install pkg-config libzmq3-dev doxygen graphviz-dev uuid-dev
- Windows MSYS2环境
$ pacman -S mingw64/mingw-w64-x86_64-zeromq
$ pacman -S mingw64/mingw-w64-x86_64-pkg-config
$ pacman -S mingw64/mingw-w64-x86_64-doxygen
$ pacman -S mingw64/mingw-w64-x86_64-graphviz
0.3.5.7 Conda的构建和部署
- GNU/Linux和macOS上安装
Conda构建和部署工具
$ conda install --yes --quiet conda-build anaconda-client jinja2 setuptools
$ conda clean -tipsy
$ conda info -a
- Windows
$conda_path = "C:\Deps\conda\Scripts\conda.exe"
$args = "install --yes --quiet conda-build anaconda-client jinja2 setuptools"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
$args = "clean -tipsy"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
$args = "info -a"
Start-Process -FilePath "$conda_path" -ArgumentList $args -Wait -Passthru
0.4 测试环境
-
示例持续集成测试
- GNU/Linux和macOS Travis( https://travis-ci.org )
- 配置文件:
travis.yml;其他脚本testing/dependencies - GNU/Linux :CMake 3.5.2和CMake 3.12.1 ;macOS :CMake 3.12.1
- 配置文件:
- Windows Appveyor( https://www.appveyor.com )
.appveyor.yml;其他脚本testing/dependencies- CMake 3.11.3
- GNU/Linux测试和商业编译器 CircleCI ( https://circleci.com )
.circleci/config.yml- CMake 3.12.1
- GNU/Linux和macOS Travis( https://travis-ci.org )
-
测试机制 python脚本
- 包含在
testing文件夹中 - 脚本
collect_tests.py- 运行测试并报告它们的状态
- 示例可以单独测试,也可以批量测试
collect_tests.py- 接受正则表达式作为命令行输入
- 包含在
$ pipenv run python testing/collect_tests.py 'chapter-0[1,7]/recipe-0[1,2,5]'
- 更详细的输出,可设置环境变量
VERBOSE_OUTPUT=ON:
$ env VERBOSE_OUTPUT=ON pipenv run python testing/collect_tests.py 'chapter-*/recipe-*'
0.5 上报问题并提出改进建议
- 问题反馈
- https://github.com/dev-cafe/cmake-cookbook/issues
- 对源码进行贡献
- Fork原始库 ,Pull Request提交更改
- 原始库: https://github.com/dev-cafe/cmake-cookbook
- 参考: https://help.github.com/articles/creating-a-pull-request-from-a-fork/
- 非重要更改在Pull Request前创建问题描述并讨论要更改的问题
- https://github.com/devcafe/cmake-cookbook/issues
相关文章:
CMake-Cookbook 第0章 配置环境
文章目录 第0章 配置环境0.1 获取代码0.2 Docker镜像0.3 安装必要的软件0.3.1 获取CMake0.3.2 编译器0.3.3 自动化构建工具0.3.4 Python0.3.5 依赖软件0.3.5.1 BLAS和LAPACk0.3.5.2 消息传递接口(MPI)0.3.5.3 线性代数模板库0.3.5.4 Boost库0.3.5.5 交叉编译器0.3.5.6 ZeroMQ, …...
优质硬盘检测工具SMART Utility,保障您的Mac数据安全
在日常使用Mac电脑的过程中,我们经常会存储大量的重要数据,如照片、文档、视频等。然而,硬盘故障却是一件令人头疼的事情,可能会导致数据丢失、系统崩溃等严重后果。为了保障您的数据安全,我们推荐一款专业的硬盘检测工…...
Spring: alibaba代码规范校验工具checkstyle
文章目录 一、idea配置checkstyle插件二、激活CheckStyle三、配置自动格式化功能四、使用代码格式化 一、idea配置checkstyle插件 下载 Intellij IDEA Checkstyle 插件:File -> setting -> plugin通过关键字CheckStyle-IDEA搜索并安装。 安裝完成后重启idea…...
c++线程thread示例
本文章记录c创建线程,启动线程和结束线程的代码。 需要注意,编译时需要添加-lpthread依赖。 代码: ThreadTest.h #ifndef TEST_THREAD_TEST_H #define TEST_THREAD_TEST_H#include <thread> #include <mutex>class ThreadTes…...
Compose | UI组件(十一) | Spacer - 留白
文章目录 前言Spacer组件的参数说明Spacer组件的使用 总结 前言 Spacer组件是让两组件之间留有空白间隔 Spacer组件的参数说明 Spacer只有一个修饰符,修饰留空白的大小和比例,颜色 Spacer(modifier: Modifier)Spacer组件的使用 Row {Box(modifier M…...
PyTorch的nn.Module类的详细介绍
在PyTorch中,nn.Module 类是构建神经网络模型的基础类,所有自定义的层、模块或整个神经网络架构都需要继承自这个类。nn.Module 类提供了一系列属性和方法用于管理网络的结构和训练过程中的计算。 1. PyTorch中nn.Module基类的定义 在PyTorch中ÿ…...
python使用activemq库ActiveMQClient类的连接activemq并订阅、发送和接收消息
引入activemq模块:from activemq import ActiveMQClient from activemq import ActiveMQClient 是一个Python的导入语句,它从activemq模块中导入了ActiveMQClient类。 解释一下各个部分: from activemq: 这表示我们正在从一个名为activemq…...
【Flutter 面试题】Dart是什么?Dart和Flutter有什么关系?
【Flutter 面试题】Dart是什么?Dart和Flutter有什么关系? 文章目录 写在前面Dart是什么Dart和Flutter有什么关系? 写在前面 👏🏻 正在学 Flutter 的同学,你好! 😊 本专栏是解决 Fl…...
前后台分离跨域交互
后台处理跨域 安装插件 >: pip install django-cors-headers插件参考地址:https://github.com/ottoyiu/django-cors-headers/项目配置:dev.py # 注册app INSTALLED_APPS [...corsheaders, ]# 添加中间件 MIDDLEWARE [...corsheaders.middleware.…...
React16源码: React中处理LegacyContext相关的源码实现
LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了,就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢?因为它…...
Boost.Test资源及示例
Note:boost_1_84_0的动态连接库资源链接 1.代码组织如下图: 2.包括程序入口的代码文件 示例: // M24.01.MyTestModule.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #define BOOST_TEST_MODULE MYTESTMODULE #def…...
数据结构二叉树
二叉树是数据结构中的一个基本概念,它是每个节点最多有两个子节点的树结构。在二叉树中,每个节点通常有两个指针,分别指向左子节点和右子节点。 数据结构定义 在二叉树的节点中,通常包含以下信息: 数据域࿱…...
JavaScript继承与原型链
继承和原型链是什么? 1.1 在继承中,子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法。这意味着子类可以使用父类的方法和属性,使用继承的目的是为了更好设置实例的公共属性和方法,如下例子: …...
SouthLeetCode-打卡24年01月第4周
SouthLeetCode-打卡24年01月第4周 // Date : 2024/01/22 ~ 2024/01/28 022.设计链表 - 双链表 (1) 题目描述 022#LeetCode.707.#北岸计划2024/01/22 (2) 题解代码 import java.util.List;class ListNode {int val;ListNode prev;ListNode next;ListNode(){this.val 0;th…...
Linux——磁盘和文件系统(一)
Linux——磁盘和文件系统 磁盘机械式磁盘固态硬盘 机械式磁盘结构磁盘,磁道,扇区柱面 文件系统的初始化划卷(划盘) 挂载C盘放了什么东西Boot Block(启动模块) 0号组放了什么东西Super Block(超级…...
EasyCVR视频智能监管系统方案设计与应用
随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。 为了解决这些问…...
Ubuntu搭建国标平台wvp-GB28181-pro
目录 简介安装和编译1.查看操作系统信息2.安装最新版的nodejs3.安装java环境4.安装mysql5.安装redis6.安装编译器7.安装cmake8.安装依赖库9.编译ZLMediaKit9.1.编译结果说明 10.编译wvp-GB28181-pro10.1.编译结果说明 配置1.WVP-PRO配置文件1.1.Mysql数据库配置1.2.REDIS数据库…...
LC 2808. 使循环数组所有元素相等的最少秒数
2808. 使循环数组所有元素相等的最少秒数 难度: 中等 题目大意: 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒,你可以对数组执行以下操作: 对于范围在 [0, n - 1] 内的每一个下标 i ,将 nums[i] 替换成 nums[i] &…...
Qt|大小端数据转换
后面打算写Qt关于网络编程的博客,网络编程就绕不开字节流数据传输,字节流数据的传输一般是根据协议来定义对应的报文该如何组包,那这就必然牵扯到了大端字节序和小端字节序的问题了。不清楚的大小端的可以看一下相关资料:大小端模…...
禅道添加自定义字段
1,数据库表 zt_story 添加自定义字段 bakDate1,bakDate2,bakDate3,bakDate4 2,在 /opt/lampp/htdocs/zentaopms/extension/custom/story/ext/config 中添加bakDate.php文件 <?php $config->story->datatab…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...
Neo4j 完全指南:从入门到精通
第1章:Neo4j简介与图数据库基础 1.1 图数据库概述 传统关系型数据库与图数据库的对比图数据库的核心优势图数据库的应用场景 1.2 Neo4j的发展历史 Neo4j的起源与演进Neo4j的版本迭代Neo4j在图数据库领域的地位 1.3 图数据库的基本概念 节点(Node)与关系(Relat…...
