CMake-Cookbook 第0章 配置环境

第0章 配置环境

  • 主要内容
    • 如何获取代码
    • GNU/Linux、macOS和Windows 安装示例所需工具
    • 自动化测试如何工作
    • 报告问题,提出改进建议

0.1 获取代码

  • git
    • git clone https://github.com/...git
    • 获取特定版本 --single-branch -b v1.0
      • git 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 安装必要的软件

  • 主机操作系统安装依赖项,安装组件
      1. CMake
      1. 编译器
      1. 自动化构建工具
      1. 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:
$ 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文件与Virtualenvpip结合使用
$ 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
  • 测试机制 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
  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cmake-gui是一个图形界面工具,用于帮助配置交叉编译环境。交叉编译是将源代码从一种平台编译成在另一种平台上运行的可执行程序的过程。以下是使用cmake-gui来配置交叉编译环境的步骤: 1. 打开cmake-gui工具。 2. 在"Where is the source code"字段中输入源代码的路径。 3. 在"Where to build the binaries"字段中输入生成的可执行文件的路径。 4. 在"Generator"字段中选择要使用的交叉编译器。 5. 在"Specify toolchain file"字段中选择交叉编译工具链文件。 6. 单击"Configure"按钮,cmake-gui将自动检测交叉编译器和工具链文件,并在窗口中显示相关的设置选项。 7. 根据实际情况修改和配置生成选项,例如选择要构建的目标平台、设置编译器选项等。 8. 单击"Generate"按钮,cmake-gui将生成Makefile或其他构建系统所需的配置文件。 9. 在终端中进入生成的可执行文件路径,并执行构建命令(例如make),即可开始交叉编译。 10. 等待编译过程完成,生成的可执行程序将位于指定的二进制路径中。 使用cmake-gui进行交叉编译配置可以简化配置过程,提供了直观的图形界面操作,同时也可以让开发人员灵活地根据需求进行各种配置选项的设置,方便进行跨平台开发和调试。 ### 回答2: cmake-gui是一个基于图形界面的CMake配置工具,用于帮助开发者进行跨平台和交叉编译的配置。 交叉编译是指在一个主机上构建、编译和运行适用于另一个主机系统的程序。在进行交叉编译配置之前,首先需要确定目标主机的架构、操作系统和编译器等信息。 使用cmake-gui进行交叉编译配置的步骤如下: 1. 打开cmake-gui工具。 2. 在"Where is the source code"一栏中,输入项目的源代码路径。 3. 在"Where to build the binaries"一栏中,输入项目的构建路径。这里可以选择在当前工作空间内或者指定一个新的目录。 4. 点击"Configure"按钮,选择对应的生成器。在弹出的对话框中,根据目标主机的操作系统类型选择对应的生成器。例如,如果目标主机是使用GNU make系统,则选择"Unix Makefiles"生成器。 5. 在"Optional platform for generator"一栏中,填写目标主机所属的平台。例如,如果目标主机是使用armv7架构,则填写"armv7"。 6. 在"Optional toolset to use"一栏中,填写用于构建目标程序的工具集。这里可以选择在配置时指定编译器和工具链。 7. 点击"Finish"按钮,开始进行交叉编译的配置过程。 8. 在配置过程中,cmake-gui会根据所选择的生成器和目标主机的相关信息,分析项目的CMakeLists.txt文件,并生成相应的配置文件。如果配置过程中缺少依赖库或编译工具等,可以在cmake-gui的界面上进行相关设置。 9. 配置完成后,点击"Generate"按钮,即可生成对应的项目构建文件。 通过以上步骤,我们可以使用cmake-gui工具进行交叉编译配置,从而在不同的主机上构建和运行适用于目标主机系统的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值