Integrating BehaviorTree.CPP Library with CMake on Windows & Ubuntu Интеграция C++-библиотеки BehaviorTree.CPP с CMake под Windows и Ubuntu
A step-by-step guide to configuring and integrating the BehaviorTree.CPP library in your CMake projects on Windows and Ubuntu. Пошаговое руководство по настройке и интеграции библиотеки BehaviorTree.CPP в проекты CMake под Windows и Ubuntu.
- Building TinyXML2 Static Library for Windows (MinGW & CMake) Сборка статической библиотеки TinyXML2 для Windows (MinGW и CMake)
- Building TinyXML2 Static Library for Ubuntu (GCC, CMake & Ninja) Сборка статической библиотеки TinyXML2 для Ubuntu (GCC, CMake и Ninja)
- Building BehaviorTree.CPP Static Library for Windows (MinGW & CMake) Сборка статической библиотеки BehaviorTree.CPP для Windows (MinGW и CMake)
- Building BehaviorTree.CPP Static Library for Ubuntu (GCC, CMake & Ninja) Сборка статической библиотеки BehaviorTree.CPP для Ubuntu (GCC, CMake и Ninja)
Step 1: Create Project Directory Шаг 1: Создание директории проекта
Create a workspace folder and a new directory for your BehaviorTree.CPP test project: Создайте рабочую папку для проектов и новую директорию для вашего тестового проекта BehaviorTree.CPP:
Windows (Command Prompt / PowerShell)
mkdir C:\projects\bt-test
cd C:\projects\bt-test
Ubuntu (Terminal)
mkdir -p ~/projects/bt-test
cd ~/projects/bt-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 <behaviortree_cpp/bt_factory.h>
// Custom action node
class SayHello : public BT::SyncActionNode {
public:
SayHello(const std::string& name, const BT::NodeConfig& config)
: BT::SyncActionNode(name, config) {}
static BT::PortsList providedPorts() {
return {};
}
BT::NodeStatus tick() override {
std::cout << "Hello, BehaviorTree.CPP!" << std::endl;
return BT::NodeStatus::SUCCESS;
}
};
int main() {
BT::BehaviorTreeFactory factory;
factory.registerNodeType<SayHello>("SayHello");
static const char* xml_text = R"(
<root BTCPP_format="4">
<BehaviorTree ID="MainTree">
<SayHello/>
</BehaviorTree>
</root>
)";
auto tree = factory.createTreeFromText(xml_text);
tree.tickWhileRunning();
return 0;
}
2. File Contents for CMakeLists.txt 2. Содержимое файла CMakeLists.txt
set(CMAKE_BUILD_TYPE "Debug")
cmake_minimum_required(VERSION 3.21)
project(bt_test CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# -----------------------------------------------------------------------------
# Define Project Source Files
# -----------------------------------------------------------------------------
set(PROJECT_SOURCES
main.cpp
)
# -----------------------------------------------------------------------------
# Declare Target Type based on OS
# -----------------------------------------------------------------------------
add_executable(app)
# Attach sources to the target dynamically
target_sources(app PRIVATE ${PROJECT_SOURCES})
# -----------------------------------------------------------------------------
# Platform Linking & Dependencies
# -----------------------------------------------------------------------------
if(WIN32)
set(BTCPP_PATH "C:/libs/behaviortree-4.9.0-mingw")
set(TINYXML2_PATH "C:/libs/tinyxml2-11.0.0-mingw")
# Core TinyXML2 Static Library
add_library(tinyxml2 STATIC IMPORTED)
set_target_properties(tinyxml2 PROPERTIES
IMPORTED_LOCATION "${TINYXML2_PATH}/lib/libtinyxml2.a"
INTERFACE_INCLUDE_DIRECTORIES "${TINYXML2_PATH}/include"
)
# BehaviorTree.CPP Static Library
add_library(behaviortree_cpp STATIC IMPORTED)
set_target_properties(behaviortree_cpp PROPERTIES
IMPORTED_LOCATION "${BTCPP_PATH}/lib/libbehaviortree_cpp.a"
INTERFACE_INCLUDE_DIRECTORIES "${BTCPP_PATH}/include"
INTERFACE_LINK_LIBRARIES "tinyxml2"
)
target_link_libraries(app PRIVATE
behaviortree_cpp
tinyxml2
)
target_compile_options(app PRIVATE -Os)
target_link_options(app PRIVATE -static -s -static-libgcc)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_link_options(app PRIVATE -mconsole)
else()
target_link_options(app PRIVATE -mwindows)
endif()
else()
set(BTCPP_PATH "$ENV{HOME}/libs/behaviortree-4.9.0-ubuntu")
set(TINYXML2_PATH "$ENV{HOME}/libs/tinyxml2-11.0.0-ubuntu")
# Core TinyXML2 Static Library
add_library(tinyxml2 STATIC IMPORTED)
set_target_properties(tinyxml2 PROPERTIES
IMPORTED_LOCATION "${TINYXML2_PATH}/lib/libtinyxml2.a"
INTERFACE_INCLUDE_DIRECTORIES "${TINYXML2_PATH}/include"
)
# BehaviorTree.CPP Static Library
add_library(behaviortree_cpp STATIC IMPORTED)
set_target_properties(behaviortree_cpp PROPERTIES
IMPORTED_LOCATION "${BTCPP_PATH}/lib/libbehaviortree_cpp.a"
INTERFACE_INCLUDE_DIRECTORIES "${BTCPP_PATH}/include"
INTERFACE_LINK_LIBRARIES "tinyxml2;pthread;dl"
)
target_link_libraries(app PRIVATE
behaviortree_cpp
tinyxml2
)
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: После запуска скриптов сборки и выполнения вы должны увидеть результат, похожий на следующий:
Hello, BehaviorTree.CPP!
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 Поддержка криптовалютой