<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amin Yahyaabadi</title>
    <description>The latest articles on DEV Community by Amin Yahyaabadi (@aminya).</description>
    <link>https://dev.to/aminya</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F250833%2F0e048ac2-3e55-44a3-9a8f-041e035bf667.jpg</url>
      <title>DEV Community: Amin Yahyaabadi</title>
      <link>https://dev.to/aminya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aminya"/>
    <language>en</language>
    <item>
      <title>Setup-Cpp</title>
      <dc:creator>Amin Yahyaabadi</dc:creator>
      <pubDate>Mon, 06 Dec 2021 16:51:47 +0000</pubDate>
      <link>https://dev.to/aminya/setup-cpp-3ia4</link>
      <guid>https://dev.to/aminya/setup-cpp-3ia4</guid>
      <description>&lt;h1&gt;
  
  
  setup-cpp
&lt;/h1&gt;

&lt;p&gt;Install all the tools required for building and testing C++/C projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aminya/setup-cpp/actions/workflows/CI.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/aminya/setup-cpp/actions/workflows/CI.yml/badge.svg" alt="Build Status (Github Actions" width="90" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Setting up a &lt;strong&gt;cross-platform&lt;/strong&gt; environment for building and testing C++/C projects is a bit tricky. Each platform has its own compilers, and each of them requires a different installation procedure. This package aims to fix this issue.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;setup-cpp&lt;/code&gt; can be used locally from terminal, from CI services like GitHub Actions and GitLab Pipelines, and inside containers like Docker.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;setup-cpp&lt;/code&gt; is supported on many platforms. It is continuously tested on several configurations including Windows (11, 10, 2022, 2019) x64/ARM/x86, Linux (Ubuntu 24.0, 22.04, 20.04, 18.04, Fedora, ArchLinux) x64/ARM64, and macOS (15, 14, 13, 12, 11, 10.15) x64/ARM. &lt;code&gt;setup-cpp&lt;/code&gt; is backed by unit tests for each tool and integration tests for compiling cpp projects.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;      &lt;span class="c1"&gt;# GitHub Actions example:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Cpp&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aminya/setup-cpp@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;llvm&lt;/span&gt;
          &lt;span class="na"&gt;vcvarsall&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;cmake&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;ninja&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;vcpkg&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;setup-cpp&lt;/code&gt; is &lt;strong&gt;modular&lt;/strong&gt; and you can choose to install any of these tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;category&lt;/th&gt;
&lt;th&gt;tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;compiler&lt;/td&gt;
&lt;td&gt;llvm, gcc, msvc, apple-clang, vcvarsall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;build system&lt;/td&gt;
&lt;td&gt;cmake, ninja, meson, make, task, bazel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;package manager&lt;/td&gt;
&lt;td&gt;vcpkg, conan, choco, brew, nala, git, setup-cpp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;analyzer/linter&lt;/td&gt;
&lt;td&gt;clang-tidy, clang-format, cppcheck, cpplint, flawfinder, lizard, infer, cmakelang, cmake-format, cmake-lint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cache&lt;/td&gt;
&lt;td&gt;ccache, sccache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;documentation&lt;/td&gt;
&lt;td&gt;doxygen, graphviz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;coverage&lt;/td&gt;
&lt;td&gt;gcovr, opencppcoverage, kcov&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;other&lt;/td&gt;
&lt;td&gt;python, powershell, sevenzip&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;setup-cpp&lt;/code&gt; automatically handles the dependencies of the selected tool (e.g., &lt;code&gt;python&lt;/code&gt; is required for &lt;code&gt;conan&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  From Terminal
&lt;/h3&gt;

&lt;h4&gt;
  
  
  With npm and Nodejs
&lt;/h4&gt;

&lt;p&gt;Run &lt;code&gt;setup-cpp&lt;/code&gt; with the available options.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Windows example (open PowerShell as admin)&lt;/span&gt;
npx setup-cpp &lt;span class="nt"&gt;--compiler&lt;/span&gt; llvm &lt;span class="nt"&gt;--cmake&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ninja&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ccache&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--vcpkg&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="c"&gt;# restart the shell to activate the environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Linux/Macos example&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;npx setup-cpp &lt;span class="nt"&gt;--compiler&lt;/span&gt; llvm &lt;span class="nt"&gt;--cmake&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ninja&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ccache&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--vcpkg&lt;/span&gt; &lt;span class="nb"&gt;true
source&lt;/span&gt; ~/.cpprc &lt;span class="c"&gt;# activate cpp environment variables&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: In the &lt;code&gt;compiler&lt;/code&gt; entry, you can specify the version after &lt;code&gt;-&lt;/code&gt; like &lt;code&gt;llvm-18&lt;/code&gt;. For the tools, you can pass a specific version instead of &lt;code&gt;true&lt;/code&gt; that chooses the default version&lt;/p&gt;

&lt;p&gt;NOTE: On Unix systems, when &lt;code&gt;setup-cpp&lt;/code&gt; is used locally or in other CI services like GitLab, the environment variables are added to &lt;code&gt;~/.cpprc&lt;/code&gt;. You should run &lt;code&gt;source ~/.cpprc&lt;/code&gt; to immediately activate the environment variables. This file is automatically sourced in the next shell restart from &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.profile&lt;/code&gt; if &lt;code&gt;SOURCE_CPPRC&lt;/code&gt; is not set to &lt;code&gt;0&lt;/code&gt;. To deactivate &lt;code&gt;.cpprc&lt;/code&gt; in the next shell restart, rename/remove &lt;code&gt;~/.cpprc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;NOTE: On Unix systems, if you are already a root user (e.g., in a GitLab runner or Docker), you will not need to use &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;NOTE: setup-cpp requires Nodejs 12 or higher. If Nodejs shipped with your distribution is older than 12, install the latest Node (e.g. for &lt;a href="https://github.com/aminya/setup-cpp/blob/e2b11c45c1108526f905729542711e343a54a7fb/dev/docker/setup-cpp-ubuntu-20.0.4.dockerfile#L4-L13" rel="noopener noreferrer"&gt;Ubuntu 20.04&lt;/a&gt;), or alternatively you can use the executables that are self-contained (see the next section).&lt;/p&gt;

&lt;h4&gt;
  
  
  With executable
&lt;/h4&gt;

&lt;p&gt;Download the executable for your platform from &lt;a href="https://github.com/aminya/setup-cpp/releases/tag/v1.1.1" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and run it with the available options. You can also automate downloading using &lt;code&gt;curl&lt;/code&gt;, or other similar tools.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# windows x64&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./setup-cpp.exe &lt;span class="nt"&gt;-LJ&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/aminya/setup-cpp/releases/download/v1.1.1/setup-cpp-x64-windows.exe"&lt;/span&gt;
&lt;span class="c"&gt;# linux x64&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./setup-cpp &lt;span class="nt"&gt;-LJ&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/aminya/setup-cpp/releases/download/v1.1.1/setup-cpp-x64-linux"&lt;/span&gt;
&lt;span class="c"&gt;# linux arm64&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./setup-cpp &lt;span class="nt"&gt;-LJ&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/aminya/setup-cpp/releases/download/v1.1.1/setup-cpp-arm64-linux"&lt;/span&gt;
&lt;span class="c"&gt;# macos arm64&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./setup-cpp &lt;span class="nt"&gt;-LJ&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/aminya/setup-cpp/releases/download/v1.1.1/setup-cpp-arm64-macos"&lt;/span&gt;
&lt;span class="c"&gt;# macos x64&lt;/span&gt;
curl &lt;span class="nt"&gt;-o&lt;/span&gt; ./setup-cpp &lt;span class="nt"&gt;-LJ&lt;/span&gt; &lt;span class="s2"&gt;"https://github.com/aminya/setup-cpp/releases/download/v1.1.1/setup-cpp-x64-macos"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An example that installs llvm, cmake, ninja, ccache, and vcpkg:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# windows example (open PowerShell as admin)&lt;/span&gt;
./setup-cpp &lt;span class="nt"&gt;--compiler&lt;/span&gt; llvm &lt;span class="nt"&gt;--cmake&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ninja&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ccache&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--vcpkg&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;span class="c"&gt;# restart the shell to activate the environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# linux/macos example&lt;/span&gt;
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./setup-cpp
&lt;span class="nb"&gt;sudo&lt;/span&gt; ./setup-cpp &lt;span class="nt"&gt;--compiler&lt;/span&gt; llvm &lt;span class="nt"&gt;--cmake&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ninja&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--ccache&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="nt"&gt;--vcpkg&lt;/span&gt; &lt;span class="nb"&gt;true
source&lt;/span&gt; ~/.cpprc &lt;span class="c"&gt;# activate cpp environment variables&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: On Unix systems, if you are already a root user (e.g., in a GitLab runner or Docker), you will not need to use &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inside GitHub Actions
&lt;/h3&gt;

&lt;p&gt;A simple example for building with LLVM, cmake, ninja, vcpkg:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Cpp&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aminya/setup-cpp@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;llvm&lt;/span&gt;
          &lt;span class="na"&gt;vcvarsall&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;cmake&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;ninja&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;vcpkg&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simple example for installing clang-format for code formatting:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Cpp&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aminya/setup-cpp@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;clang-format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A complete cross-platform example that tests llvm, gcc, and msvc. It also uses cmake, ninja, vcpkg, and cppcheck.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ci&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.os }}&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;fail-fast&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;os&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;windows-2022&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ubuntu-24.04&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;macos-14&lt;/span&gt; &lt;span class="c1"&gt;# arm64&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;macos-13&lt;/span&gt;
        &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;llvm&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;gcc&lt;/span&gt;
          &lt;span class="c1"&gt;# you can specify the version after `-` like `llvm-18`.&lt;/span&gt;
        &lt;span class="na"&gt;include&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;os&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;windows-2022"&lt;/span&gt;
            &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;msvc"&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cache&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/cache@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;./build/&lt;/span&gt;
            &lt;span class="s"&gt;~/vcpkg&lt;/span&gt;
            &lt;span class="s"&gt;~/.cache/vcpkg/archives&lt;/span&gt;
            &lt;span class="s"&gt;${{ env.LOCALAPPDATA }}/vcpkg/archives&lt;/span&gt;
            &lt;span class="s"&gt;${{ env.APPDATA }}/vcpkg/archives&lt;/span&gt;
            &lt;span class="s"&gt;${{ env.XDG_CACHE_HOME }}/vcpkg/archives&lt;/span&gt;
            &lt;span class="s"&gt;~/.cache/ccache&lt;/span&gt;
            &lt;span class="s"&gt;~/.ccache&lt;/span&gt;
            &lt;span class="s"&gt;~/.config/ccache&lt;/span&gt;
            &lt;span class="s"&gt;~/Library/Caches/ccache&lt;/span&gt;
            &lt;span class="s"&gt;${{ env.LOCALAPPDATA }}/ccache&lt;/span&gt;
            &lt;span class="s"&gt;${{ env.XDG_CACHE_HOME }}/ccache&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ runner.os }}-${{ matrix.compiler }}-${{ env.BUILD_TYPE }}-${{ hashFiles('**/CMakeLists.txt', './vcpkg.json') }}&lt;/span&gt;
          &lt;span class="na"&gt;restore-keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
            &lt;span class="s"&gt;${{ runner.os }}-${{ env.BUILD_TYPE }}-&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Cpp&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aminya/setup-cpp@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.compiler }}&lt;/span&gt;
          &lt;span class="na"&gt;vcvarsall&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;cmake&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;ninja&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;vcpkg&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;cppcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# instead of `true`, which chooses the default version, you can pass a specific version.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When using the &lt;code&gt;setup-cpp&lt;/code&gt; action in GitHub Actions, by default it will also install the &lt;code&gt;setup-cpp&lt;/code&gt; CLI, which you can use in the subsequent commands. You can modify the default behaviour if needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Cpp&lt;/span&gt;
    &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aminya/setup-cpp@v1&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;setup-cpp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;node-package-manager&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Use Setup Cpp CLI&lt;/span&gt;
    &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;setup-cpp --compiler llvm --cmake &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="s"&gt; --ninja &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="s"&gt; --ccache &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="s"&gt; --vcpkg &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prebuilt Docker Images
&lt;/h3&gt;

&lt;p&gt;To provide fast development environments, &lt;code&gt;setup-cpp&lt;/code&gt; provides several prebuilt docker images that have the tools you need. You can use these images as a base image for your project.&lt;/p&gt;

&lt;p&gt;The names are in the format &lt;code&gt;aminya/setup-cpp-&amp;lt;platform&amp;gt;:&amp;lt;platform_version&amp;gt;-&amp;lt;setup_cpp_version&amp;gt;&lt;/code&gt; and &lt;code&gt;aminya/setup-cpp-&amp;lt;platform&amp;gt;-&amp;lt;compiler&amp;gt;:&amp;lt;platform_version&amp;gt;-&amp;lt;setup_cpp_version&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ubuntu Images
&lt;/h4&gt;

&lt;p&gt;Base image with &lt;code&gt;cmake, ninja, task, vcpkg, python, make, cppcheck, gcovr, doxygen, ccache, conan, meson, cmakelang&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-ubuntu:22.04-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image with &lt;code&gt;llvm&lt;/code&gt; and the base tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-ubuntu-llvm:22.04-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image with &lt;code&gt;gcc&lt;/code&gt; and the base tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-ubuntu-gcc:22.04-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image with &lt;code&gt;mingw&lt;/code&gt; and the base tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-ubuntu-mingw:22.04-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Fedora Images
&lt;/h4&gt;

&lt;p&gt;Base image with &lt;code&gt;cmake, ninja, task, vcpkg, python, make, cppcheck, gcovr, doxygen, ccache, conan, meson, cmakelang&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-fedora:40-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;llvm&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-fedora-llvm:40-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;gcc&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-fedora-gcc:40-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;mingw&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-fedora-mingw:40-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  ArchLinux Images
&lt;/h4&gt;

&lt;p&gt;Base image with &lt;code&gt;cmake, ninja, task, vcpkg, python, make, cppcheck, gcovr, doxygen, ccache, conan, meson, cmakelang&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-arch:base-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;llvm&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-arch-llvm:base-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;gcc&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-arch-gcc:base-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Image with &lt;code&gt;mingw&lt;/code&gt; and the base tools:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;aminya/setup-cpp-arch-mingw:base-1.2.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Custom Docker Images
&lt;/h3&gt;

&lt;p&gt;If you need to install the tools selectively, you can create your own Docker image with the tools you need.&lt;/p&gt;

&lt;p&gt;Here is an example for using setup-cpp to make a builder image that has the Cpp tools you need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;#### Base Image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ubuntu:22.04&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;setup-cpp-ubuntu&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="nt"&gt;-qq&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="c"&gt;# install nodejs&lt;/span&gt;
    apt-get install -y --no-install-recommends nodejs npm &amp;amp;&amp;amp; \
    # install setup-cpp
    npm install -g setup-cpp@v1.1.1 &amp;amp;&amp;amp; \
    # install the compiler and tools
    NODE_OPTIONS="--enable-source-maps" \
    setup-cpp \
        --nala true \
        --compiler llvm \
        --cmake true \
        --ninja true \
        --task true \
        --vcpkg true \
        --python true \
        --make true \
        --cppcheck true \
        --gcovr true \
        --doxygen true \
        --ccache true &amp;amp;&amp;amp; \
    # cleanup
    nala autoremove -y &amp;amp;&amp;amp; \
    nala autopurge -y &amp;amp;&amp;amp; \
    apt-get clean &amp;amp;&amp;amp; \
    nala clean --lists &amp;amp;&amp;amp; \
    rm -rf /var/lib/apt/lists/* &amp;amp;&amp;amp; \
    rm -rf /tmp/*

&lt;span class="k"&gt;SHELL&lt;/span&gt;&lt;span class="s"&gt; ["/bin/bash", "-l", "-c"]&lt;/span&gt;
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["/bin/bash", "-l"]&lt;/span&gt;

&lt;span class="c"&gt;#### Building (example)&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;setup-cpp-ubuntu&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./dev/cpp_vcpkg_project /home/app&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /home/app&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;task build

&lt;span class="c"&gt;#### Running environment&lt;/span&gt;
&lt;span class="c"&gt;# use a fresh image as the runner&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ubuntu:22.04&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;runner&lt;/span&gt;

&lt;span class="c"&gt;# copy the built binaries and their runtime dependencies&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /home/app/build/my_exe/Release/ /home/app/&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /home/app/&lt;/span&gt;
&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["./my_exe"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See &lt;a href="https://github.com/aminya/setup-cpp/tree/master/dev/docker" rel="noopener noreferrer"&gt;this folder&lt;/a&gt;, for some dockerfile examples.&lt;/p&gt;

&lt;p&gt;If you want to build the ones included, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="nt"&gt;--recurse-submodules&lt;/span&gt; https://github.com/aminya/setup-cpp
&lt;span class="nb"&gt;cd&lt;/span&gt; ./setup-cpp
docker build &lt;span class="nt"&gt;-f&lt;/span&gt; ./dev/docker/setup-cpp/setup-cpp-ubuntu.dockerfile &lt;span class="nt"&gt;-t&lt;/span&gt; setup-cpp-ubuntu-llvm:22.04-17 ./
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where you should use the path to the dockerfile after &lt;code&gt;-f&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After build, run the following to start an interactive shell in your container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-it&lt;/span&gt; setup-cpp-ubuntu-llvm:22.04-17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inside Docker inside GitHub Actions
&lt;/h3&gt;

&lt;p&gt;You can use the docker file discussed in the previous section inside GitHub Actions like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Docker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ matrix.os }}&lt;/span&gt;
    &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;matrix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;os&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ubuntu-24.04&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker_build&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker build -f ./dev/docker/ubuntu.dockerfile -t setup-cpp .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inside GitLab pipelines
&lt;/h3&gt;

&lt;p&gt;The following gives an example for setting up a C++ environment inside GitLab pipelines.&lt;/p&gt;

&lt;p&gt;.gitlab-ci.yaml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu:22.04&lt;/span&gt;

&lt;span class="na"&gt;stages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;

&lt;span class="na"&gt;.setup_linux&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;setup_linux&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;DEBIAN_FRONTEND=noninteractive&lt;/span&gt;

  &lt;span class="s"&gt;# set time-zone&lt;/span&gt;
  &lt;span class="s"&gt;TZ=Canada/Pacific&lt;/span&gt;
  &lt;span class="s"&gt;ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;amp;&amp;amp; echo $TZ &amp;gt; /etc/timezone&lt;/span&gt;

  &lt;span class="s"&gt;# for downloading&lt;/span&gt;
  &lt;span class="s"&gt;apt-get update -qq&lt;/span&gt;
  &lt;span class="s"&gt;apt-get install -y --no-install-recommends curl gnupg ca-certificates&lt;/span&gt;

&lt;span class="na"&gt;.setup-cpp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;setup-cpp&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;# install nodejs&lt;/span&gt;
  &lt;span class="s"&gt;apt-get install -y --no-install-recommends nodejs npm&lt;/span&gt;

  &lt;span class="s"&gt;# install setup-cpp&lt;/span&gt;
  &lt;span class="s"&gt;npm install -g setup-cpp@v1.1.1&lt;/span&gt;

  &lt;span class="s"&gt;# install the compiler and tools&lt;/span&gt;
  &lt;span class="s"&gt;./setup-cpp-x64-linux --compiler $compiler --cmake true --ninja true --ccache true --vcpkg true&lt;/span&gt;
  &lt;span class="s"&gt;source ~/.cpprc&lt;/span&gt;

&lt;span class="na"&gt;.test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nl"&gt;&amp;amp;test&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;# Build and Test&lt;/span&gt;
  &lt;span class="s"&gt;# ...&lt;/span&gt;

&lt;span class="na"&gt;test_linux_llvm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
  &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;llvm&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*setup_linux&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*setup-cpp&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*test&lt;/span&gt;

&lt;span class="na"&gt;test_linux_gcc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;stage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
  &lt;span class="na"&gt;variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;compiler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gcc&lt;/span&gt;
  &lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*setup_linux&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*setup-cpp&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;*test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Articles
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/aminya/setup-cpp-3ia4"&gt;Setup-Cpp on Dev.to&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/aminya/cpp_vcpkg_project" rel="noopener noreferrer"&gt;cpp_vcpkg_project project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aminya/project_options" rel="noopener noreferrer"&gt;project_options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cpp-best-practices/cpp_starter_project" rel="noopener noreferrer"&gt;cpp-best-practices starter project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ArthurSonzogni/FTXUI" rel="noopener noreferrer"&gt;ftxui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pantor/inja" rel="noopener noreferrer"&gt;inja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/teslamotors/fixed-containers" rel="noopener noreferrer"&gt;teslamotors/fixed-containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zeromq/zeromq.js" rel="noopener noreferrer"&gt;zeromq.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lefticus/json2cpp" rel="noopener noreferrer"&gt;json2cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lefticus/tools" rel="noopener noreferrer"&gt;lefticus/tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/e-dant/watcher" rel="noopener noreferrer"&gt;watcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pinpoint-apm/pinpoint-c-agent" rel="noopener noreferrer"&gt;pinpoint-c-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atilaneves/dpp" rel="noopener noreferrer"&gt;dpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Predelnik/DSpellCheck" rel="noopener noreferrer"&gt;DSpellCheck&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SunDoge/simdjson-rust" rel="noopener noreferrer"&gt;simdjson-rust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/seijikun/CXXIter" rel="noopener noreferrer"&gt;CXXIter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ArthurSonzogni/git-tui" rel="noopener noreferrer"&gt;git-tui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/orex/supercell" rel="noopener noreferrer"&gt;supercell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atilaneves/libclang" rel="noopener noreferrer"&gt;libclang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/aminya/d-tree-sitter" rel="noopener noreferrer"&gt;d-tree-sitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atom-community/papm" rel="noopener noreferrer"&gt;atom-community/papm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/abeimler/ecs_benchmark" rel="noopener noreferrer"&gt;ecs_benchmark&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ArthurSonzogni/smk" rel="noopener noreferrer"&gt;smk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See all of the usage examples on GitHub &lt;a href="https://github.com/search?q=aminya%2Fsetup-cpp+path%3A.github%2Fworkflows%2F+language%3AYAML+fork%3Atrue&amp;amp;type=code" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>actionshackathon21</category>
      <category>cpp</category>
      <category>github</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
