Integrating Recast Navigation Static Libraries with CMake on Windows & Ubuntu Интеграция статических библиотек Recast Navigation с CMake под Windows и Ubuntu
A step-by-step guide to configuring and integrating the Recast Navigation static libraries in your CMake projects on Windows and Ubuntu. Пошаговое руководство по настройке и интеграции статических библиотек Recast Navigation в проекты CMake под Windows и Ubuntu.
- Building Recast Navigation Static Libraries for Windows (MinGW & CMake) Сборка статических библиотек Recast Navigation для Windows (MinGW и CMake)
- Building Recast Navigation Static Libraries for Ubuntu (GCC, CMake & Ninja) Сборка статических библиотек Recast Navigation для Ubuntu (GCC, CMake и Ninja)
Step 1: Create Project Directory Шаг 1: Создание директории проекта
Create a workspace folder and a new directory for your Recast Navigation test project: Создайте рабочую папку для проектов и новую директорию для вашего тестового проекта Recast Navigation:
Windows (Command Prompt / PowerShell)
mkdir C:\projects\recast-test
cd C:\projects\recast-test
Ubuntu (Terminal)
mkdir -p ~/projects/recast-test
cd ~/projects/recast-test
Step 2: Create Source Files (main.cpp & CMakeLists.txt) Шаг 2: Создание исходных файлов (main.cpp и CMakeLists.txt)
You can create these files using Notepad / Sublime Text on Windows, or nano in Ubuntu terminal:
Вы можете создать эти файлы через Блокнот / Sublime Text в Windows или с помощью nano в терминале Ubuntu:
Windows (Terminal / Notepad)
notepad main.cpp
notepad CMakeLists.txt
Ubuntu (Terminal / Nano)
nano main.cpp
nano CMakeLists.txt
1. File Contents for main.cpp 1. Содержимое файла main.cpp
#include <iostream>
#include <Recast.h>
#include <DetourNavMesh.h>
#include <DetourNavMeshQuery.h>
int main() {
std::cout << "Initializing Recast & Detour..." << std::endl;
// Allocate Recast Context
rcContext ctx;
// Allocate Detour NavMesh & NavMeshQuery objects
dtNavMesh* navMesh = dtAllocNavMesh();
dtNavMeshQuery* navQuery = dtAllocNavMeshQuery();
if (!navMesh || !navQuery) {
std::cerr << "Failed to allocate Detour structures!" << std::endl;
return 1;
}
dtStatus status = navQuery->init(navMesh, 2048);
if (dtStatusSucceed(status)) {
std::cout << "NavMeshQuery initialized (empty mesh baseline test successful)." << std::endl;
}
// Clean up allocated memory
dtFreeNavMeshQuery(navQuery);
dtFreeNavMesh(navMesh);
std::cout << "Recast Navigation integration test completed successfully!" << std::endl;
return 0;
}
2. File Contents for CMakeLists.txt 2. Содержимое файла CMakeLists.txt
Imports all core Recast & Detour static library targets explicitly and configures platform-specific paths: Явно импортирует все основные цели статических библиотек Recast и Detour и настраивает пути под платформу:
set(CMAKE_BUILD_TYPE "Debug")
cmake_minimum_required(VERSION 3.21)
project(recast_test CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(PROJECT_SOURCES
main.cpp
)
add_executable(app)
target_sources(app PRIVATE ${PROJECT_SOURCES})
if(WIN32)
set(RECAST_DIR "C:/libs/recastnavigation-mingw")
target_include_directories(app PRIVATE
${RECAST_DIR}/include/recastnavigation
)
add_library(Recast_Static STATIC IMPORTED)
set_target_properties(Recast_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libRecast.a"
)
add_library(Detour_Static STATIC IMPORTED)
set_target_properties(Detour_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetour.a"
)
add_library(DebugUtils_Static STATIC IMPORTED)
set_target_properties(DebugUtils_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDebugUtils.a"
)
add_library(DetourCrowd_Static STATIC IMPORTED)
set_target_properties(DetourCrowd_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetourCrowd.a"
)
add_library(DetourTileCache_Static STATIC IMPORTED)
set_target_properties(DetourTileCache_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetourTileCache.a"
)
target_link_libraries(app PRIVATE
Recast_Static
Detour_Static
DebugUtils_Static
DetourCrowd_Static
DetourTileCache_Static
)
target_compile_options(app PRIVATE -Os)
target_link_options(app PRIVATE -static -s -static-libgcc -static-libstdc++ -mconsole)
else() # Linux / Ubuntu
set(RECAST_DIR "$ENV{HOME}/libs/recastnavigation-ubuntu")
target_include_directories(app PRIVATE
${RECAST_DIR}/include/recastnavigation
)
add_library(Recast_Static STATIC IMPORTED)
set_target_properties(Recast_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libRecast.a"
)
add_library(Detour_Static STATIC IMPORTED)
set_target_properties(Detour_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetour.a"
)
add_library(DebugUtils_Static STATIC IMPORTED)
set_target_properties(DebugUtils_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDebugUtils.a"
)
add_library(DetourCrowd_Static STATIC IMPORTED)
set_target_properties(DetourCrowd_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetourCrowd.a"
)
add_library(DetourTileCache_Static STATIC IMPORTED)
set_target_properties(DetourTileCache_Static PROPERTIES
IMPORTED_LOCATION "${RECAST_DIR}/lib/libDetourTileCache.a"
)
find_package(Threads REQUIRED)
target_link_libraries(app PRIVATE
Recast_Static
Detour_Static
DebugUtils_Static
DetourCrowd_Static
DetourTileCache_Static
Threads::Threads
)
endif()
Step 3: Create Build & Execution Scripts Шаг 3: Создание скриптов сборки и запуска
Windows (MinGW / Batch Scripts)
config-exe.bat
cmake -G Ninja -S . -B dist/win
build-exe.bat
cmake --build dist/win
run-exe.bat
@echo off
.\dist\win\app.exe
Run the scripts sequentially in Command Prompt or PowerShell: Последовательно запустите скрипты в командной строке или PowerShell:
config-exe.bat
build-exe.bat
run-exe.bat
Ubuntu (Bash Scripts)
config-bin.sh
#!/usr/bin/env bash
set -e
cmake -G Ninja -S . -B dist/linux
build-bin.sh
#!/usr/bin/env bash
set -e
cmake --build dist/linux
run-bin.sh
#!/usr/bin/env bash
set -e
./dist/linux/app
Grant execute permissions on Ubuntu before running: Предоставьте права на выполнение в Ubuntu перед запуском:
chmod +x config-bin.sh build-bin.sh run-bin.sh
./config-bin.sh
./build-bin.sh
./run-bin.sh
Step 4: Expected Output Шаг 4: Ожидаемый результат
After running the build and execution scripts, you should see output similar to this: После запуска скриптов сборки и выполнения вы должны увидеть результат, похожий на следующий:
Initializing Recast & Detour...
NavMeshQuery initialized (empty mesh baseline test successful).
Recast Navigation integration test completed successfully!
Support My Work Поддержать проект
If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.
Sberbank (Russia only) Сбербанк (только для РФ)
Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)
USDT TRC20
Support via Cryptocurrency Поддержка криптовалютой