持续集成
在这里,您可以找到使用 Meson 与各种 CI(如 Travis 和 AppVeyor)的代码片段。
如果这些说明对您不起作用,请提交问题。
带有 Docker 的 Travis-CI
带有 Docker 的 Travis 可以访问较新的非 LTS Ubuntu 版本,其中预装了您选择的库。
此 yml
文件源自 Meson 用于运行其自身测试的配置。
os:
- linux
- osx
language:
- cpp
services:
- docker
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install python3 ninja; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then pip3 install meson; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull YOUR/REPO:eoan; fi
script:
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo FROM YOUR/REPO:eoan > Dockerfile; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo ADD . /root >> Dockerfile; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker build -t withgit .; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker run withgit /bin/sh -c "cd /root && TRAVIS=true CC=$CC CXX=$CXX meson setup builddir && meson test -C builddir"; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then SDKROOT=$(xcodebuild -version -sdk macosx Path) meson setup builddir && meson test -C builddir; fi
适用于 Linux 主机的 CircleCI(使用自定义 Docker 镜像)
CircleCi 可以用于创建您想要的任何 Linux 镜像。以下是一个与之一起使用的示例 yml
文件。
version: 2.1
executors:
# Your dependencies would go in the docker images that represent
# the Linux distributions you are supporting
meson_ubuntu_builder:
docker:
- image: your_dockerhub_username/ubuntu-sys
meson_debian_builder:
docker:
- image: your_dockerhub_username/debian-sys
meson_fedora_builder:
docker:
- image: your_dockerhub_username/fedora-sys
jobs:
meson_ubuntu_build:
executor: meson_ubuntu_builder
steps:
- checkout
- run:
name: Configure Project
command: meson setup builddir --backend ninja
- run:
name: Compile Project
command: meson compile -C builddir
- run:
name: Run Tests
command: meson test -C builddir
meson_debian_build:
executor: meson_debian_builder
steps:
- checkout
- run:
name: Configure Project
command: meson setup builddir --backend ninja
- run:
name: Compile Project
command: meson compile -C builddir
- run:
name: Run Tests
command: meson test -C builddir
meson_fedora_build:
executor: meson_fedora_builder
steps:
- checkout
- run:
name: Configure Project
command: meson setup builddir --backend ninja
- run:
name: Compile Project
command: meson compile -C builddir
- run:
name: Run Tests
command: meson test -C builddir
workflows:
version: 2
linux_workflow:
jobs:
- meson_ubuntu_build
- meson_debian_build
- meson_fedora_build
适用于 Linux 主机的 CircleCI(不使用自定义 Docker 镜像)
此 CircleCI 配置在名为 build
的工作流程中定义了两个作业,build-linux
和 build-macos
。build-linux
作业使用带有 Python 3.12.3 的 Docker 镜像,而 build-macos
在带有 Xcode 15.3.0 的 macOS 上运行。每个作业都涉及检出代码、安装 Meson 和 Ninja、配置项目、编译项目以及使用 Meson 运行测试。
version: 2.1
jobs:
build-linux:
docker:
- image: cimg/python:3.12.3
steps:
- checkout
- run:
name: Install Meson and Ninja
command: |
python -m pip install --user meson ninja
- run:
name: Configure Project
command: |
meson setup builddir
- run:
name: Compile Project
command: |
meson compile -C builddir
- run:
name: Run Tests
command: |
meson test -C builddir
build-macos:
macos:
xcode: 15.3.0
steps:
- checkout
- run:
name: Install Meson and Ninja
command: |
python -m pip install meson ninja
- run:
name: Configure Project
command: |
meson setup builddir
- run:
name: Compile Project
command: |
meson compile -C builddir
- run:
name: Run Tests
command: |
meson test -C builddir
workflows:
version: 2.1
build:
jobs:
- build-linux
- build-macos
适用于 Windows 的 AppVeyor
对于 Windows 上的 CI,AppVeyor 提供了广泛的 默认配置。AppVeyor 还拥有 MacOS 和 Linux CI 镜像。这是一个适用于带有 Visual Studio 2017、2019 和 2022 的 Windows 的示例 appveyor.yml
文件。
version: 1.0.{build}
image:
- Visual Studio 2022
- Visual Studio 2019
- Visual Studio 2017
install:
- cmd: python -m pip install meson ninja
build_script:
- cmd: >-
meson setup builddir
meson compile -C builddir
test_script:
- cmd: meson test -C builddir
Qt
对于 Qt 5,请在 PYTHON_ROOT
赋值附近添加以下行
- cmd: if %arch%==x86 (set QT_ROOT=C:\Qt\5.11\%compiler%) else (set QT_ROOT=C:\Qt\5.11\%compiler%_64)
之后将 %QT_ROOT%\bin
添加到 PATH
变量中。
您可能需要调整您的构建矩阵,例如,没有 msvc2017 32 位构建。有关更多详细信息,请访问 AppVeyor 文档中的 构建环境 页面。
Boost
以下语句足以让 Meson 找到 Boost
- cmd: set BOOST_ROOT=C:\Libraries\boost_1_67_0
没有 Docker 的 Travis
非 Docker Travis-CI 构建可以使用 Linux、MacOS 或 Windows。在构建 **矩阵** 中设置所需的编译器。此示例适用于 **Linux**(Ubuntu 18.04)和 **C**。
dist: bionic
group: travis_latest
os: linux
language: python
matrix:
include:
- env: CC=gcc
- env: CC=clang
install:
- pip install meson ninja
script:
- meson setup builddir
- meson compile -C builddir
- meson test -C builddir
GitHub Actions
GitHub Actions 为持续集成 (CI) 提供了一个多功能平台。此示例工作流程文件 ci_meson.yml
专为使用 GCC 在 Linux、macOS 和 Windows 上使用 C 语言的项目而设计。它由对 C 代码文件的更改触发,并使用不同版本的 Meson(1.0.0、1.1.0、1.2.0、1.3.0、1.4.0)跨多个操作系统自动执行构建和测试过程。工作流程中的每个作业都处理检出、依赖项安装、项目配置、测试执行以及失败时可选的测试日志上传。
name: CI Meson
on:
push:
paths:
- "**.c"
- "**.h"
pull_request:
paths:
- "**.c"
- "**.h"
jobs:
build:
name: Build and Test on ${{ matrix.os }} with Meson v${{ matrix.meson_version }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
meson_version: ["1.2.0", "1.3.0", "1.4.0"]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: python -m pip install meson==${{ matrix.meson_version }} ninja
- name: Configure Project
run: meson setup builddir/
env:
CC: gcc
- name: Run Tests
run: meson test -C builddir/ -v
- name: Upload Test Log
uses: actions/upload-artifact@v4
if: failure()
with:
name: ${{ matrix.os }}_Meson_Testlog
path: builddir/meson-logs/testlog.txt
搜索结果为