8.0 KiB
8.0 KiB
Hướng dẫn Build bằng CMake
Hướng dẫn chi tiết để build project pnkx_nav_core sử dụng CMake standalone (không cần Catkin workspace).
Mục lục
- Yêu cầu hệ thống
- Cài đặt Dependencies
- Build Project
- Các tùy chọn Build
- Install
- Sử dụng trong project khác
- Troubleshooting
Yêu cầu hệ thống
Hệ điều hành
- Linux (Ubuntu 18.04+ hoặc tương đương)
Compiler
- GCC: phiên bản 7.0 trở lên (hỗ trợ C++17)
- Clang: phiên bản 5.0 trở lên
CMake
- CMake: phiên bản 3.10 trở lên
Kiểm tra phiên bản:
cmake --version
g++ --version
Cài đặt Dependencies
Linux (Ubuntu/Debian)
# Cập nhật package list
sudo apt-get update
# Cài đặt CMake và build tools
sudo apt-get install -y cmake build-essential
# Cài đặt các thư viện cần thiết
sudo apt-get install -y \
libboost-all-dev \
libeigen3-dev \
libyaml-cpp-dev \
libpcl-dev \
libgoogle-glog-dev
# Optional: Cài đặt Google Test (nếu muốn build tests)
sudo apt-get install -y libgtest-dev
Lưu ý: Hướng dẫn này dành cho hệ thống Linux. Nếu sử dụng các distro khác (CentOS, Fedora, Arch, etc.), vui lòng cài đặt các packages tương ứng bằng package manager của distro đó.
Build Project
Bước 1: Clone repository
git clone https://git.pnkr.asia/HiepLM/pnkx_nav_core.git
cd pnkx_nav_core
git submodule init
git submodule update
Bước 2: Tạo thư mục build
mkdir build
cd build
Bước 3: Cấu hình với CMake
# Cấu hình cơ bản (Release mode)
cmake ..
# Hoặc chỉ định build type rõ ràng
cmake -DCMAKE_BUILD_TYPE=Release ..
# Hoặc Debug mode (để debug)
cmake -DCMAKE_BUILD_TYPE=Debug ..
Bước 4: Build
# Build tất cả targets
make
# Hoặc build với nhiều cores (nhanh hơn)
make -j$(nproc)
Bước 5: Kiểm tra build thành công
# Kiểm tra các thư viện đã được build
ls -la lib/
# Kiểm tra các executable (nếu có)
ls -la bin/
Các tùy chọn Build
Build Type
# Release mode (mặc định) - tối ưu hóa
cmake -DCMAKE_BUILD_TYPE=Release ..
# Debug mode - với debug symbols
cmake -DCMAKE_BUILD_TYPE=Debug ..
# RelWithDebInfo - Release với debug info
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
# MinSizeRel - Tối ưu kích thước
cmake -DCMAKE_BUILD_TYPE=MinSizeRel ..
Build chỉ một target cụ thể
# Build chỉ một library
make robot_cpp_node_handle
# Build chỉ move_base
make move_base
# Build chỉ C API
make navigation_c_api
Các tùy chọn CMake khác
# Tắt warnings (đã được cấu hình sẵn trong CMakeLists.txt)
cmake -DCMAKE_CXX_FLAGS="-w" ..
# Chỉ định compiler
cmake -DCMAKE_CXX_COMPILER=g++-9 ..
# Chỉ định install prefix
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
# Build tests (nếu có)
cmake -DBUILD_TESTS=ON ..
Install
Sau khi build thành công, bạn có thể install các thư viện và headers vào hệ thống:
# Install vào thư mục mặc định (/usr/local)
sudo make install
# Hoặc install vào thư mục tùy chỉnh
cmake -DCMAKE_INSTALL_PREFIX=/opt/pnkx_nav_core ..
make install
Cấu trúc sau khi install:
/usr/local/
├── include/
│ ├── robot/
│ ├── nav_core2/
│ ├── mkt_algorithm/
│ └── ...
├── lib/
│ ├── librobot_cpp_node_handle.so
│ ├── libmove_base.so
│ └── ...
└── lib/cmake/
├── robot_cpp/
├── move_base/
└── ...
Sử dụng trong project khác
Sử dụng với CMake
Sau khi install, bạn có thể sử dụng trong CMakeLists.txt của project khác:
cmake_minimum_required(VERSION 3.10)
project(my_project)
# Tìm các packages
find_package(robot_cpp REQUIRED)
find_package(move_base REQUIRED)
find_package(navigation_c_api REQUIRED)
# Link libraries
add_executable(my_app main.cpp)
target_link_libraries(my_app
PRIVATE
robot::node_handle
robot::console
move_base
navigation_c_api
)
Sử dụng C API (cho .NET/C#)
Xem hướng dẫn chi tiết trong examples/README.md và examples/QUICK_START.md.
Tóm tắt:
# Copy shared library
cp build/src/APIs/c_api/libnavigation_c_api.so /path/to/your/project/
# Sử dụng trong C#
[DllImport("libnavigation_c_api.so")]
public static extern IntPtr create_navigation();
Troubleshooting
Lỗi: "Could not find Boost"
# Kiểm tra Boost đã được cài đặt
dpkg -l | grep libboost
# Cài đặt lại nếu thiếu
sudo apt-get install libboost-all-dev
Lỗi: "Could not find Eigen3"
# Cài đặt Eigen3
sudo apt-get install libeigen3-dev
# Hoặc chỉ định đường dẫn
cmake -DEigen3_DIR=/usr/include/eigen3 ..
Lỗi: "Could not find yaml-cpp"
# Cài đặt yaml-cpp
sudo apt-get install libyaml-cpp-dev
Lỗi: "undefined reference"
Đảm bảo tất cả dependencies đã được build theo đúng thứ tự:
- Core libraries (tf3, robot_time, xmlrpcpp, robot_cpp)
- Geometry và messages (geometry2, common_msgs)
- Navigation cores (nav_core, nav_core2)
- Algorithms (score_algorithm, mkt_algorithm)
- Main packages (move_base)
Build lại từ đầu:
cd build
rm -rf *
cmake ..
make -j$(nproc)
Lỗi: "Permission denied" khi install
# Sử dụng sudo cho system-wide install
sudo make install
# Hoặc install vào user directory
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..
make install
Build chậm
# Sử dụng nhiều cores
make -j$(nproc)
# Chỉ build target cần thiết
make robot_cpp_node_handle # Thay vì make all
Clean build
# Xóa toàn bộ build directory
cd build
rm -rf *
# Hoặc xóa chỉ các file object
make clean
Cấu trúc Build Output
Sau khi build, cấu trúc thư mục build/ sẽ như sau:
build/
├── CMakeCache.txt
├── CMakeFiles/
├── cmake_install.cmake
├── Makefile
├── lib/
│ ├── librobot_cpp_console.so
│ ├── librobot_cpp_node_handle.so
│ ├── libmove_base.so
│ ├── libnavigation_c_api.so
│ └── ...
├── src/
│ ├── Libraries/
│ │ ├── robot_cpp/
│ │ └── ...
│ ├── Navigations/
│ │ └── ...
│ └── Algorithms/
│ └── ...
└── bin/ # (nếu có executables)
Environment Variables
Một số biến môi trường hữu ích:
# Chỉ định config directory cho NodeHandle
export PNKX_NAV_CORE_CONFIG_DIR=/path/to/config
# Chỉ định workspace directory
export PNKX_NAV_CORE_DIR=/path/to/pnkx_nav_core
# LD_LIBRARY_PATH (nếu không install)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/pnkx_nav_core/build/lib
Quick Reference
Build nhanh (một lệnh)
mkdir -p build && cd build && cmake .. && make -j$(nproc)
Build và Install
mkdir -p build && cd build && cmake .. && make -j$(nproc) && sudo make install
Rebuild từ đầu
rm -rf build && mkdir build && cd build && cmake .. && make -j$(nproc)
Liên kết hữu ích
Ghi chú
- Project này sử dụng C++17 standard
- Warnings đã được tắt trong build configuration (
-wflag) - Tất cả libraries được build dưới dạng shared libraries (.so)
- Build type mặc định là Release với optimization
-O3