# Setup - Crow

Skip to content

# Setup

This page explains how to set Crow up for use with your project.

## Requirements

- C++ compiler with C++14 support.
  - Crow's CI uses g++-9.3 and clang-7.0 running on AMD64 (x86_64) and ARM64v8
- boost library (1.70 or later).
- (optional) ZLib for HTTP Compression.
- (optional) CMake and Python3 to build tests and/or examples.
- (optional) Linking with jemalloc/tcmalloc is recommended for speed.

Note

While using Boost 1.70 or later is recommended, it may be possible to compile a Crow application with version 1.64

## Installing Requirements

Note

The Linux requirements are for developing and compiling a Crow application. Running a built application requires the actual libraries rather than just the development headers.

### Ubuntu

`sudo apt-get install build-essential libboost-all-dev`

### Non Debian based GNU/Linux

Use your package manager to install the following: - GCC and G++ (or Clang and Clang++) - Boost Development headers (sometimes part of the Boost package itself)

### OSX

`brew install boost`

### Windows

Microsoft Visual Studio 2019 (older versions not tested)

## Downloading

Either run `git clone https://github.com/crowcpp/crow.git` or download `crow_all.h` from the releases section. You can also download a zip of the project on github.

## Includes folder

1. Copy the `/includes` folder to your project's root folder.
2. Add `#include "path/to/includes/crow.h"` to your `.cpp` file.
3. For any middlewares, add `#include "path/to/includes/middlewares/some_middleware.h"`.

## Single header file

If you've downloaded `crow_all.h`, you can skip to step 4.

1. Make sure you have python 3 installed.
2. Open a terminal (or `cmd.exe`) instance in `/path/to/crow/scripts`.
3. Run `python merge_all.py ../include crow_all.h` (replace `/` with `\` if you're on Windows).
4. Copy the `crow_all.h` file to where you put your libraries (if you don't know where this is, you can put it anywhere).
5. Add `#include "path/to/crow_all.h"` to your `.cpp` file.
   Note: All middlewares are included with the merged header file, if you would like to include or exclude middlewares use the `-e` or `-i` arguments.

## building via CLI

To build a crow Project, do the following:

### GCC (G++)

- Release: `g++ main.cpp -lpthread -lboost_system`.
- Debug: `g++ main.cpp -ggdb -lpthread -lboost_system -DCROW_ENABLE_DEBUG`.
- SSL: `g++ main.cpp -lssl -lcrypto -lpthread -lboost_system -DCROW_ENABLE_SSL`.

### Clang

- Release: `clang++ main.cpp -lpthread -lboost_system`.
- Debug: `clang++ main.cpp -g -lpthread -lboost_system -DCROW_ENABLE_DEBUG`.
- SSL: `clang++ main.cpp -lssl -lcrypto -lpthread -lboost_system -DCROW_ENABLE_SSL`.

### Microsoft Visual Studio 2019

The following guide will use `example_with_all.cpp` as the Crow application for demonstration purposes.

1. Generate `crow_all.h` following Single header file.
2. `git clone https://github.com/microsoft/vcpkg.git`
3. `.\vcpkg\bootstrap-vcpkg.bat`
4. `.\vcpkg\vcpkg integrate install`
5. Create empty Visual Studio project.
6. In solution explorer, right click the name of your project then click `Open Folder in File Explorer`.
7. Copy `crow_all.h`, `example_with_all.cpp`, `vcpkg.json` to opened folder.
8. Add `crow_all.h` to `Header Files` and `example_with_all.cpp` to `Source Files`.
9. In solution explorer, right click the name of your project then click `Properties`.
10. Under `vcpkg`, set `Use Vcpkg Manifest` to `Yes` and `Additional Options` to `--feature-flags="versions"`.
11. Set `Debug/Release` and `x64/x86`.
12. Run.

## building via CMake

Add the following to your `CMakeLists.txt`:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    find_package(Threads)
    find_package(ZLIB)
    find_package(OpenSSL)

    if(OPENSSL_FOUND)
        include_directories(${OPENSSL_INCLUDE_DIR})
    endif()

    if (NOT CMAKE_BUILD_TYPE)
        message(STATUS "No build type selected, default to Release")
        set(CMAKE_BUILD_TYPE "Release")
    endif()

    if (MSVC)
        set(Boost_USE_STATIC_LIBS "On")
        find_package( Boost 1.70 COMPONENTS system thread regex REQUIRED )
    else()
        find_package( Boost 1.70 COMPONENTS system thread REQUIRED )
    endif()

    include_directories(${Boost_INCLUDE_DIR})

    set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)

    include_directories("${PROJECT_INCLUDE_DIR}")

Note

The last 2 lines are unnecessary if you're using `crow_all.h`.

## Building Crow tests and examples

Out-of-source build with CMake is recommended.

    mkdir build
    cd build
    cmake ..
    make

Running Cmake will create `crow_all.h` file and place it in the build directory.

You can run tests with following command:

    ctest -V

## Installing Crow

if you wish to use Crow globally without copying `crow_all.h` in your projects, you can install Crow on your machine with the procedure below.

    mkdir build
    cd build
    cmake ..
    make install

`make install` will copy `crow_all.h` automatically in your `/usr/local/include` thus making it available globally for use.