Quick Start
This guide is meant to show basic usage of uncross for a new project.
Project Creation
To begin, create a project with the uncross new command:
uncross new project
This will create a new directory in the current working directory with the structure:
project
├── .git
│ └── <git files>
├── include
│ └── project.h
├── src
│ ├── CMakeLists.txt
│ └── main.c
├── .clang-format
├── .clang-tidy
├── .gitignore
├── CMakeLists.txt
├── Makefile
└── uncross.toml
This project structure has a very small C program that will compile to print "Hello,
Build Project
To build in debug mode:
uncross build
To build in release mode:
uncross build --release
To build both:
uncross build --all
After building, observe the following directory structure:
project
├── .git
│ └── <git files>
├── build
│ ├── Debug
│ │ └── <debug build files>
│ └── Release
│ └── <release build files>
├── debug
│ └── bin
│ └── project_Linux_x86_64
├── include
│ └── project.h
├── release
│ └── bin
│ └── project_Linux_x86_64
├── src
│ ├── CMakeLists.txt
│ └── main.c
├── .clang-format
├── .clang-tidy
├── .gitignore
├── CMakeLists.txt
├── Makefile
└── uncross.toml
The debug and release directories are a creation of uncross. The behavior of building the debug and release binaries in implemented in the default CMakeLists.txt, and must be reimplemented in existing projects if this behavior is desired.
CodeChecker
uncross automates the creation of HTML reports with CodeChecker using a compilation database from CMake. To run the report and automatically open it in a browser, run:
uncross check --open
Running the above command without the --open flag will not open a browser window, and the files will be available under the release or debug directories. The check command takes the same flags as build to choose the build mode.
Linting and Formatting
uncross enables checking for lint, and automatically formatting source files, via clang-format. uncross lint will check all .c and .h files in the project for lint, and uncross fmt will automatically format them. uncross will pass an argument to clang-format to have it use a .clang-format file in the project root.