# Detailed compilation
To perform the compilation, execute the following commands from the root of HATCHet's repository.
```shell
$ mkdir build
$ cd build/
$ ccmake ..
$ make
```
HATCHet's compilation process attempts to automatically find the following Gurobi's paths.
| Name | Path | Comment |
|------|------|---------|
| `GUROBI_CPP_LIB` | `/to/gurobiXXX/YY/lib/libgurobi_c++.a` |
- `/to/gurobi` is the path to Gurobi's home, typically `/opt/gurobiXXX` for linux and `/Library/gurobiXXX` for mac
- `XXX` is the Gurobi full version, e.g. 702 or 751
- `YY` depends on os, typically `linux64` for linux or `mac64` for mac
|
| `GUROBI_INCLUDE_DIR` | `/to/gurobiXXX/YY/include` | - `/to/gurobi` is the path to Gurobi's home
- `XXX` is the Gurobi full version
- `YY` depends on os
|
| `GUROBI_LIB` | `/to/gurobiXXX/YY/lib/libgurobiZZ.QQ` | - `/to/gurobiXXX` is the path to Gurobi's home
- `XXX` is the Gurobi full version
- `YY` depends on os
- `ZZ` are typically the first 2 numbers of `XXX`
- `QQ` is typically `so` but becomes `dylib` for MAC version since version 8.10
|
If the automatic compilation fails to find the Gurobi's paths, these need to be specified directly. First, user needs to verify the existence of each of these 3 files. Next, user can specify these paths directly by either using
```shell
$ ccmake ..
```
or by directly running `CMake` with proper flags as following
```shell
$ cmake .. \
-DGUROBI_CPP_LIB=/to/gurobiXXX/YY/lib/libgurobi_c++.a \
-DGUROBI_INCLUDE_DIR=/to/gurobiXXX/YY/include \
-DGUROBI_LIB=/to/gurobiXXX/YY/lib/libgurobiZZ.QQ
```