shortener-bot/DPP/docpages/make_a_bot/cmake.md

3.9 KiB

\page buildcmake Building a Discord Bot Using CMake (UNIX)

\warning This tutorial will assume that you have already installed DPP. If you haven't, please head over to \ref install-linux-deb "this page", or any install page that matches your OS. If you want to use source, then continue your journey over at \ref buildlinux "this page" for a full explanation into using CMake with source.

1. Toolchain

Before continuing, you will need to install cmake on your system. To be sure that cmake is installed, you can type the following command:

$ cmake --version
cmake version 3.22.1

If your CMake version is not as shown above then don't worry! You can still follow along, even if you're ahead or behind!

2. Create a CMake project

In an empty directory, create the following files and directories:

\dot digraph "Example Directory" { graph [ranksep=1]; node [colorscheme="blues9", fontname="helvetica"];

"Your Directory" [style=filled, color=1, shape=rect]

subgraph cluster_0 {
	style=filled;
    color=lightgrey;
    node [style=filled, color=2, shape=rect]
    build;
    cmake;
    src;
    "CMakeLists.txt";
    label = "The main area for your bot's files.";
}

subgraph cluster_1 {
	style=filled;
    color=lightgrey;
    node [style=filled, color=3, shape=rect]
    "FindDPP.cmake";
    label = "This file is to tell CMake where DPP is.";
}

subgraph cluster_2 {
	style=filled;
    color=lightgrey;
    node [style=filled, color=3, shape=rect]
    "main.cpp";
    "main.h";
    "more code...";
    label = "This is where your bot's code will go.";
}

"Your Directory" -> build;
"Your Directory" -> src;
"Your Directory" -> cmake;
"Your Directory" -> "CMakeLists.txt";

cmake -> "FindDPP.cmake";

src -> "main.cpp";
src -> "main.h";
src -> "more code...";

} \enddot

3. Configure CMake

You'll need to modify the CMakeLists.txt to tell CMake what it's looking for, and other information.

Here is an example CMake configuration, you can adapt it according to your needs:

# Minimum CMake version required, we'll just use the latest version.
cmake_minimum_required(VERSION 3.22)
# Project name, version and description
project(discord-bot VERSION 1.0 DESCRIPTION "A discord bot")

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)

# Create an executable
add_executable(${PROJECT_NAME}
	src/main.cpp
)

# Find our pre-installed DPP package (using FindDPP.cmake).
find_package(DPP REQUIRED)

# Link the pre-installed DPP package.
target_link_libraries(${PROJECT_NAME} 
	${DPP_LIBRARIES}
)

# Include the DPP directories.
target_include_directories(${PROJECT_NAME} PRIVATE
	${DPP_INCLUDE_DIR}
)

# Set C++ version
set_target_properties(${PROJECT_NAME} PROPERTIES
	CXX_STANDARD 17
	CXX_STANDARD_REQUIRED ON
)

We'll also need to populate our FindDPP.cmake file, inside the cmake directory!

Here's what you should use:

find_path(DPP_INCLUDE_DIR NAMES dpp/dpp.h HINTS ${DPP_ROOT_DIR})

find_library(DPP_LIBRARIES NAMES dpp "libdpp.a" HINTS ${DPP_ROOT_DIR})

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(DPP DEFAULT_MSG DPP_LIBRARIES DPP_INCLUDE_DIR)

4. Build the bot.

Now that we have our all our cmake stuff setup and we've got our code in place, we can initalise CMake. You'll want to go inside the build/ directory and do cmake ...

Once that's completed, you'll want to head back to your up-most folder (where all the folders are for your bot) and run cmake --build build/ -j4 (replace -j4 with however many threads you want to use). This will start compiling your bot and creating the executable.

After that has finished, you can head into build/ and run your bot by doing ./discord-bot! If everything went well, you should see your bot come online!

Have fun!