* Use newer actions/checkout@v2 in examples That's the current version. Even our own build scripts use it. * Correct actions syntax By the way, it's been ages since steps get their own section... * Provide an example with matrix Finally, have some example to showcase input usage. * Move inputs after examples Since they are more useful, put copy-pastable examples first. Then you can look at all available inputs, now that you know how to use them.
3.1 KiB
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,win64x86or its synonyms:win32
- cross-compilation:
x86_amd64,x86_arm,x86_arm64,amd64_x86,amd64_arm,amd64_arm64
- native compilation:
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.1to use Windows 8.1 SDK
toolset– select VC++ compiler toolset version- do not specify to use the default toolset
14.0for VC++ 2015 Compiler Toolset14.XXfor the latest 14.XX toolset installed (e.g,14.11)14.XX.YYYYYfor a specific full version number (e.g,14.11.25503)
uwp– settrueto build for Universal Windows Platform (i.e., for Windows Store)spectre– settrueto use Visual Studio libraries with Spectre mitigations
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.
License
MIT, see LICENSE.