AppVeyor CI: используйте скрипт сборки для Linux и MSBuild для Windows - PullRequest
0 голосов
/ 02 декабря 2018

Сценарий

У меня есть проект CMake в AppVeyor, в который я пытаюсь добавить сборки Linux.Мои сборки Windows используют генератор CMake в скрипте before_build для генерации решения Visual Studio, которое построено с build: project.

. Я хочу вместо этого выполнять сборки Linux с build_script:.Однако, когда я добавляю скрипт компоновки в матрицу, я получаю сообщение об ошибке:

Фаза компоновки установлена ​​в режим «MSBuild» (по умолчанию), но в Visual Studio проект или файлы решения не найдены вкорневой каталог.Если вы не собираете проект Visual Studio, переключите режим сборки в «Скрипт» и введите свою собственную команду сборки.

Попытки решения

Я попытался добавить build: off и build: Scriptк матрице, однако ни один из этих вариантов не помог.Является ли мой единственный вариант определения сценария для Windows и использования build_script на обеих платформах?

Пример

Мой appveyor.yml файл выглядит следующим образом

version: 'build-{build}-{branch}'

image:
  - Visual Studio 2017
  - Ubuntu

platform:
  - x64

configuration:
  - Release
  - Debug

environment:
  APPVEYOR_YML_DISABLE_PS_LINUX: true

install:
  - ps: .\install-dependency.ps1
  - sh: ./install-dependency.sh

for:
-
  matrix:
    only:
      - image: Ubuntu
  before_build:
    - mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% ..
  build_script:
    - make

 -
   matrix:
     only:
       - image: Visual Studio 2017
   before_build:
     - cmake -G "Visual Studio 15 2017" -A x64 .
   build:
     project: $(APPVEYOR_PROJECT_NAME).sln

test_script:
  - CTest -C %CONFIGURATION%

Сведения о попытках решения

Для справки я попытался указать параметры сборки

matrix:
  only:
    - image: Ubuntu
build: Script
before_build:
  - mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% ..

Дальнейшие исследования

Я попытался выполнить автономную сборку Linux,все работает как положено, и мне не нужно изменять параметры script.Возможно, AppVeyor не поддерживает смешивание типов сборки даже с установленной матрицей.

version: 'build-{build}-{branch}'

image: Ubuntu

platform:
  - x64

configuration:
  - Release
  - Debug

install:
  - sh: ./install-dependency.sh

before_build:
  - mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% ..

build_script:
  - make

test_script:
  - ctest -C %CONFIGURATION%

1 Ответ

0 голосов
/ 09 декабря 2018

Хотя я и не нашел решения поставленного вопроса, существует обходной путь для сборки на обеих платформах.Для Windows я могу использовать скрипт MSBuild по умолчанию msbuild <project> /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll".

version: 'build-{build}-{branch}'

image:
  - Visual Studio 2017
  - Ubuntu

platform:
  - x64

configuration:
  - Release
  - Debug

environment:
  APPVEYOR_YML_DISABLE_PS_LINUX: true

install:
  - ps: .\install-dependency.ps1
  - sh: ./install-dependency.sh

for:
-
  matrix:
    only:
      - image: Ubuntu
  before_build:
    - mkdir -p build; cd build; cmake -DCMAKE_BUILD_TYPE=%CONFIGURATION% ..
  build_script:
    - make

 -
   matrix:
     only:
       - image: Visual Studio 2017
   before_build:
     - cmake -G "Visual Studio 15 2017" -A x64 .
  build_script:
    - msbuild %APPVEYOR_PROJECT_NAME%.sln /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"

test_script:
  - ctest -C %CONFIGURATION%
...