Skip to main content

Command Palette

Search for a command to run...

How to properly use uWebSocket in CMake

Updated
1 min read
cmake_minimum_required(VERSION 3.28)
project(MyProject)

set(CMAKE_CXX_STANDARD 20)

add_executable(MyProject main.cpp)

include(FetchContent)

FetchContent_Declare(
    uws
    GIT_REPOSITORY https://github.com/uNetworking/uWebSockets.git
    GIT_TAG v20.71.0
    GIT_SHALLOW true
)

FetchContent_GetProperties(uws)

if(NOT uws_POPULATED)
    FetchContent_Populate(uws)

    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
        set(UWS_LTO 0)
    else()
        set(UWS_LTO 1)
    endif()

    find_program(MAKE_EXECUTABLE NAMES gmake make mingw32-make nmake REQUIRED)
    execute_process(
        COMMAND ${CMAKE_COMMAND} -E env WITH_LTO=${UWS_LTO} LIBUS_NO_SSL=1 ${MAKE_EXECUTABLE}
        WORKING_DIRECTORY ${uws_SOURCE_DIR}/uSockets
        OUTPUT_STRIP_TRAILING_WHITESPACE
    )

    add_library(uwslib STATIC IMPORTED GLOBAL)
    set_target_properties(uwslib PROPERTIES IMPORTED_LOCATION ${uws_SOURCE_DIR}/uSockets/uSockets.a)
    target_include_directories(uwslib INTERFACE ${uws_SOURCE_DIR}/src ${uws_SOURCE_DIR}/uSockets/src)
    target_compile_definitions(uwslib INTERFACE LIBUS_NO_SSL UWS_WITH_PROXY UWS_HTTPRESPONSE_NO_WRITEMARK)
    target_link_libraries(uwslib INTERFACE -lz)
endif()

target_include_directories(MyProject PRIVATE ${uws_SOURCE_DIR}/src)
target_link_libraries(MyProject PRIVATE uwslib)
#include <iostream>
#include <App.h>

int main() {
    // Create a basic uWebSockets app
    uWS::App().get("/*", [](auto *res, auto *req) {
                  // Send a simple response to any GET request
                  res->end("Hello, World!");
              }).listen(9001, [](auto *token) {
                if (token) {
                    std::cout << "Server listening on port 9001" << std::endl;
                } else {
                    std::cout << "Failed to listen on port 9001" << std::endl;
                }
            }).run();

    std::cout << "Server has stopped!" << std::endl;
    return 0;
}
.
├── CMakeLists.txt
├── cmake-build-debug
└── main.cpp
87 views