diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2766e58 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +// .devcontainer/devcontainer.json +{ + "name": "ModernCppStarter", + "context": "..", + "dockerFile": "../Dockerfile", + "customizations": { + "vscode": { + "settings": { + "C_Cpp.default.compilerPath": "/usr/bin/clang++", + "cmake.generator": "Ninja" + }, + "extensions": [ + "ms-vscode.cmake-tools", + "ms-vscode.cpptools", + "twxs.cmake" + ] + } + } +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6ac81d6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +# Use official Ubuntu image +FROM ubuntu:24.04 + +# Install dependencies +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + build-essential \ + cmake \ + ninja-build \ + git \ + curl \ + gdb \ + lldb \ + python3 \ + python3-pip \ + python3-venv \ + clang \ + clang-tidy \ + lcov \ + doxygen \ + meson \ + libpsl-dev \ + sudo \ + pkg-config \ + ghostscript \ + && apt-get clean + +# Create and activate a virtual environment for Python tools +ENV VIRTUAL_ENV=/opt/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + +# Set CLANG_FORMAT_EXECUTABLE environment variable to use clang-format from the venv +RUN ln -s /opt/venv/bin/clang-format /usr/local/bin/clang-format + +# Upgrade pip and install Python packages in venv +RUN pip install --upgrade pip && \ + pip install clang-format==14.0.6 cmake_format==0.6.11 pyyaml jinja2 pygments + +# Load shell +CMD ["/bin/bash"] diff --git a/README.md b/README.md index 46b6226..18354a7 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,10 @@ Additional arguments can be passed to the analyzers by setting the `CLANG_TIDY_A Ccache can be enabled by configuring with `-DUSE_CCACHE=`. +#### Devcontainer + +The project includes a dockerfile along with a devcontainer file which allows for development in a docker container. Open the project folder in VS Code and you should be prompted to reopen the project in a container. + ## FAQ > Can I use this for header-only libraries?