AppVeyor CI:对Linux使用构建脚本,对Windows使用MSBuild

时间:2018-12-02 09:06:17

标签: appveyor

场景

我在AppVeyor上有一个CMake项目,我正在尝试将Linux Build添加到其中。我的Windows版本在before_build脚本中使用CMake生成器来生成由build: project构建的Visual Studio解决方案。

我想改用build_script:执行Linux构建。但是,当我向矩阵添加构建脚本时,出现错误:

  

构建阶段设置为“ MSBuild”模式(默认),但是在根目录中找不到Visual Studio项目或解决方案文件。如果您不构建Visual Studio项目,则将构建模式切换为“脚本”,并提供自定义构建命令。

尝试的解决方案

我尝试将build: offbuild: 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 :(得分:0)

尽管我还没有找到问题的解决方案,但是在这两个平台上都可以构建解决方法。对于Windows,我可以使用default MSBuild脚本<div dir="rtl"> <textarea></textarea> </div>

msbuild <project> /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"