持续集成

在这里,您可以找到使用 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-linuxbuild-macosbuild-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 还拥有 MacOSLinux 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

搜索结果为