Giter VIP home page Giter VIP logo

msvc-dev-cmd's Introduction

GitHub Actions status

msvc-dev-cmd

GitHub Action for configuring Developer Command Prompt for Microsoft Visual C++.

This sets up the environment for compiling C/C++ code from command line.

Supports Windows. Does nothing on Linux and macOS.

Example usage

Basic usage for default compilation settings is like this:

jobs:
  test:
    steps:
      - uses: actions/checkout@v2
      - uses: ilammy/msvc-dev-cmd@v1
      - name: Build something requiring CL.EXE
        run: |
          cmake -G "NMake Makefiles" .
          nmake
      # ...

If you want something non-default, like using a specific version of Visual Studio, or cross-compling for a differen target, you will need to configure those settings via inputs:

jobs:
  test:
    # Run a job for each of the specified target architectures:
    strategy:
      matrix:
        arch:
          - amd64
          - amd64_x86
          - amd64_arm64
    steps:
      - uses: actions/checkout@v2
      - uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: ${{ matrix.arch }}
      - name: Build something requiring CL.EXE
        run: |
          cmake -G "NMake Makefiles" .
          nmake
      # ...

Inputs

  • arch – target architecture

    • native compilation:
      • x64 (default) or its synonyms: amd64, win64, x86_64, x86-64
      • x86 or its synonyms: win32
    • cross-compilation: x86_amd64, x86_arm, x86_arm64, amd64_x86, amd64_arm, amd64_arm64
  • sdk – Windows SDK to use

    • do not specify to use the default SDK
    • or specify full Windows 10 SDK number (e.g, 10.0.10240.0)
    • or write 8.1 to use Windows 8.1 SDK
  • toolset – select VC++ compiler toolset version

    • do not specify to use the default toolset
    • 14.0 for VC++ 2015 Compiler Toolset
    • 14.XX for the latest 14.XX toolset installed (e.g, 14.11)
    • 14.XX.YYYYY for a specific full version number (e.g, 14.11.25503)
  • uwp – set true to build for Universal Windows Platform (i.e., for Windows Store)

  • spectre – set true to use Visual Studio libraries with Spectre mitigations

  • vsversion - The Visual Studio version to use. This can be the version number (e.g. 16.0 for 2019) or the year (e.g. "2019").

Caveats

Name conflicts with shell: bash

Using shell: bash in Actions may shadow some of the paths added by MSVC. In particular, link.exe (Microsoft C linker) is prone to be shadowed by /usr/bin/link (GNU filesystem link tool).

Unfortunately, this happens because GitHub Actions unconditionally prepend GNU paths when shell: bash is used, on top of any paths set by msvc-dev-cmd, every time at the start of each new step. Hence, there aren't many non-destructive options here.

If you experience compilation errors where link complains about unreasonable command-line arguments, “extra operand something-something” – that's probably it. Recommended workaround is to remove /usr/bin/link if that interferes with your builds. If this is not acceptable, please file an issue, then we'll figure out something better.

Reconfiguration

You can invoke ilammy/msvc-dev-cmd multiple times during your jobs with different inputs to reconfigure the environment for building with different settings (e.g., to target multiple architectures).

jobs:
  release:
    steps:
      # ...
      - name: Configure build for amd64
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: amd64

      - run: build # (for amd64)

      - name: Configure build for x86
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: amd64_x86

      - run: build # (for x86)

      - name: Configure build for ARM64
        uses: ilammy/msvc-dev-cmd@v1
        with:
          arch: amd64_arm64

      - run: build # (for ARM64)

      # ...

This mostly works but it's not really recommended since Developer Command Prompt was not meant for recursive reconfiguration. That said, if it does not work for you, please file an issue.

Consider using strategy.matrix to execute different build configuration in parallel, independent environments.

License

MIT, see LICENSE.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.