# Compile

You would use the Hardhat as usual. Client classes will be generated for the compiled contracts automatically

```
npx hardhat compile
```

#### Additional CLI parameters

### `--sources`&#x20;

Override the default sources folder (`/contracts`)

```
npx hardhat compile --sources /other/folder/in/projects/root
```

***

### `--artifacts`&#x20;

Override the default output folder

```
npx hardhat compile --artifacts /foo/bar
```

***

### `--watch true`&#x20;

Compile the contracts, watch `*.sol` files for changes and automatically recompile

```
npx hardhat compile --watch true
```

***

### `--package`

Enables the mono-repo structure for the project. The contracts can now be organized into separate package folders within the repository

```

project/
├─ packages/
│  ├─ Foo/
│  │  ├─ contracts/
│  │  │  ├─ Foo.sol
│  ├─ Bar/
│  │  ├─ contracts/
│  │  │  ├─ Bar.sol
```

Every package can be implemented separately, but still **reference the contracts and interfaces** of each other. To compile the package:

```
npx hardhat compile --package packages/Bar
```
