How to properly use uWebSocket in CMake
Updated
•1 min readcmake_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

