2021-09-14 14:51:57 +08:00
# setup-cpp
2021-09-14 14:57:47 +08:00
Install all the tools required for building and testing C++/C projects.
2021-09-14 14:51:57 +08:00
![Build Status (Github Actions) ](https://github.com/aminya/setup-cpp/workflows/CI/badge.svg )
2021-09-14 15:00:41 +08:00
[![Dependency Status ](https://david-dm.org/aminya/setup-cpp.svg )](https://david-dm.org/aminya/setup-cpp)
2021-09-14 17:40:04 +08:00
2021-09-17 19:29:58 +08:00
Setting up a **cross-platform** 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.
2021-09-14 17:40:04 +08:00
2021-09-17 19:29:58 +08:00
This package is designed to be **modular** and as **minimal** as possible. This will allow you to install the tools you want. It is continuously tested on Windows, Linux, and macOS.
2021-09-14 17:40:04 +08:00
2021-09-17 19:29:58 +08:00
The package can be used locally or from CI services like GitHub Actions. Stay tuned for the stable release.
2021-09-14 17:40:04 +08:00
2021-09-17 19:29:58 +08:00
# Features
2021-09-16 20:15:17 +08:00
2021-09-17 19:29:58 +08:00
`setup-cpp` can install all of these tools:
2021-09-16 18:00:16 +08:00
2021-09-17 19:29:58 +08:00
- llvm
2021-09-17 23:47:30 +08:00
- gcc
2021-09-17 19:29:58 +08:00
- cmake
- ninja
- meson
- conan
- ccache
- cppcheck
- doxygen
- gcovr
- opencppcoverage
- python
- choco
- brew
2021-09-16 18:00:16 +08:00
2021-09-17 23:27:08 +08:00
# Usage
2021-09-19 00:50:18 +08:00
# From Terminal
2021-09-18 02:24:17 +08:00
2021-09-18 04:40:13 +08:00
You should download the exe file or the js file (if have Nodejs installed), and run it with the available options.
2021-09-18 02:24:17 +08:00
Tip: You can automate downloading using `wget` , `curl` or other similar tools.
### Executable
2021-09-19 01:05:52 +08:00
Download the executable for your platform from [here ](https://github.com/aminya/setup-cpp/releases/tag/v0.2 ), and run it with the available options.
2021-09-18 04:40:13 +08:00
2021-09-19 01:05:52 +08:00
An example that installs llvm, cmake, ninja, ccache, and conan:
2021-09-18 04:40:13 +08:00
2021-09-18 10:42:56 +08:00
```ps1
# windows example (open shell as admin)
2021-09-19 01:05:52 +08:00
curl -O "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp_windows.exe"
./setup_cpp_windows --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-18 02:24:17 +08:00
```
2021-09-18 10:42:56 +08:00
```ps1
# linux example
2021-09-19 01:05:52 +08:00
wget "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp_linux"
2021-09-18 10:42:56 +08:00
chmod +x setup_cpp_linux
2021-09-19 01:05:52 +08:00
sudo ./setup_cpp_linux --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-18 10:42:56 +08:00
```
```ps1
# mac example
2021-09-19 01:05:52 +08:00
wget "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_mac_linux"
2021-09-18 10:42:56 +08:00
chmod +x setup_cpp_mac
2021-09-19 01:05:52 +08:00
sudo ./setup_cpp_mac --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-18 02:24:17 +08:00
```
2021-09-19 01:05:52 +08:00
NOTE: In the `compiler` entry, you can specify the version after `-` like `llvm-11` .
For the tools, instead of `true` , which chooses the default version, you can pass a specific version.
2021-09-18 02:24:17 +08:00
### With Nodejs
2021-09-19 01:05:52 +08:00
Download the `setup_cpp.js` file form [here ](https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp.js ), and run it with the available options.
2021-09-18 02:24:17 +08:00
2021-09-18 10:42:56 +08:00
On Windows
```ps1
# open shell as admin
2021-09-19 01:05:52 +08:00
wget "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp_windows.exe"
node ./setup_cpp.js --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-18 02:24:17 +08:00
```
2021-09-18 10:42:56 +08:00
On Linux or Mac:
```ps1
2021-09-19 01:05:52 +08:00
wget "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp.js"
sudo node ./setup_cpp.js --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-18 10:42:56 +08:00
```
2021-09-19 00:50:18 +08:00
# Inside GitHub Actions
2021-09-17 23:27:08 +08:00
Here is a complete cross-platform example that tests llvm and gcc. It also uses cmake, ninja, conan, cppcheck, and ccache.
`.github/workflows/ci.yml` :
```yaml
name: ci
on:
pull_request:
push:
branches:
- main
- master
jobs:
Test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- windows-2019
- ubuntu-20.04
- macos-10.15
compiler:
- llvm
- gcc
2021-09-19 01:05:52 +08:00
# you can specify the version after `-` like `llvm-11` .
2021-09-17 23:27:08 +08:00
steps:
- name: Setup Cpp
2021-09-18 04:32:14 +08:00
uses: aminya/setup-cpp@v1
2021-09-17 23:27:08 +08:00
with:
compiler: ${{ matrix.compiler }}
cmake: true
ninja: true
conan: true
cppcheck: true
2021-09-19 01:05:52 +08:00
ccache: true # instead of `true` , which chooses the default version, you can pass a specific version.
2021-09-17 23:47:30 +08:00
# add any tool that you need here...
2021-09-17 23:27:08 +08:00
```
2021-09-19 00:50:18 +08:00
# Inside Docker
Here is an example for using setup_cpp to make a builder image that has the cpp tools you need.
```dockerfile
2021-09-19 01:05:52 +08:00
# debian
2021-09-19 01:28:27 +08:00
FROM buildpack-deps:bullseye
2021-09-19 00:50:18 +08:00
2021-09-19 01:05:52 +08:00
# add setup_cpp
2021-09-19 00:50:18 +08:00
WORKDIR "/"
2021-09-19 01:05:52 +08:00
RUN wget "https://github.com/aminya/setup-cpp/releases/download/v0.2/setup_cpp_linux"
RUN chmod +x ./setup_cpp_linux
2021-09-19 00:50:18 +08:00
# install llvm, cmake, ninja, ccache, and conan
2021-09-19 01:05:52 +08:00
RUN ./setup_cpp --compiler llvm --cmake true --ninja true --ccache true --conan true
2021-09-19 00:50:18 +08:00
ENTRYPOINT [ "/bin/bash" ]
```
See [this folder ](https://github.com/aminya/setup-cpp/tree/master/building/docker ), for some dockerfile examples.
2021-09-19 01:05:52 +08:00
If you want to build the ones included, then run:
2021-09-19 00:50:18 +08:00
```ps1
2021-09-19 01:05:52 +08:00
docker build -f ./building/docker/debian.dockerfile -t setup_cpp .
2021-09-19 00:50:18 +08:00
```
2021-09-19 01:05:52 +08:00
After `-f` use the docker file name.
2021-09-17 19:29:58 +08:00
### Incomplete
2021-09-16 18:00:16 +08:00
2021-09-17 19:29:58 +08:00
- [ ] msvc. It is implemented, but has bugs. See [this issue ](https://github.com/aminya/cpp/issues/1 )
- [ ] vcpkg (TODO)