当前位置:首页>Linux>在嵌入式Linux中,如何搭建一个项目工程框架?

在嵌入式Linux中,如何搭建一个项目工程框架?

  • 2026-10-10 11:14:00
在嵌入式Linux中,如何搭建一个项目工程框架?

操作系统OS:Linux-ubuntu20.04

开发环境IDE:vscode


第 1 步目标

  • 建好项目目录
  • 写好CMakeLists.txt
  • 写好Logger 日志模块
  • 写好main.cpp
  • 编译成功
  • 实现运行输出:
[INFO] humanoid_joint_project start

第 2 步:先创建目录

在终端执行:

mkdir -p humanoid_joint_demo/{include/common,include/hal,include/protocol,include/drivers,include/control,include/sensors,include/simulation}mkdir -p humanoid_joint_demo/{src/common,src/hal,src/protocol,src/drivers,src/control,src/sensors,src/simulation}mkdir -p humanoid_joint_demo/{config,docs,scripts,test,logs,build}cd humanoid_joint_demo

检查目录,执行:

find . -maxdepth 2 -type d | sort

第 3 步:写 CMakeLists.txt

在项目根目录创建文件:

文件:vim CMakeLists.txt

# 指定 CMake 最低版本要求cmake_minimum_required(VERSION 3.10)# 定义项目名称project(humanoid_joint_project)# 指定使用 C++17 标准set(CMAKE_CXX_STANDARD 17)# 要求必须支持 C++17set(CMAKE_CXX_STANDARD_REQUIRED ON)# 禁止编译器使用 GNU 扩展,保证代码更标准set(CMAKE_CXX_EXTENSIONS OFF)# 如果没有指定编译类型,则默认使用 Debug 模式if(NOT CMAKE_BUILD_TYPE)    set(CMAKE_BUILD_TYPE Debug)endif()# 添加常用警告选项,帮助尽早发现代码问题add_compile_options(-Wall -Wextra)# 添加头文件搜索路径include_directories(include)# 递归收集 src 目录下的所有 cpp 源文件file(GLOB_RECURSE SRC_FILES    src/*.cpp)# 生成可执行文件 humanoid_joint_projectadd_executable(${PROJECT_NAME} ${SRC_FILES})

project第 4 步:日志模块


文件:include/common/logger.h

#pragma once  // 防止头文件被重复包含/* * 文件作用: * 本文件定义项目中的基础日志类 Logger。 * * 当前阶段目标: * 1. 支持 INFO / WARN / ERROR 三种日志级别 * 2. 支持多线程场景下的互斥输出 * 3. 输出格式统一为:[LEVEL] message */#include<iostream>  #include<mutex>     // 用于互斥锁,保证多线程日志不会互相打断#include<string>    // 用于 std::stringnamespace hjp {  // humanoid_joint_project 的命名空间classLogger {public:staticvoidinfo(conststd::string& msg);staticvoidwarn(conststd::string& msg);staticvoiderror(conststd::string& msg);private:/*     * 成员作用:     * 用于保证多个线程同时打印日志时,输出内容不会交叉混乱。     */staticstd::mutex mutex_;staticvoidlog(conststd::string& level, conststd::string& msg);};}  // namespace hjp

文件:src/common/logger.cpp

/* * 文件作用: * 本文件实现 Logger 类的具体功能。 */#include"common/logger.h"// 引入对应头文件namespace hjp {  // 进入项目命名空间// 定义静态互斥锁对象std::mutex Logger::mutex_;voidLogger::log(conststd::string& level, conststd::string& msg){// 加锁,确保多线程同时输出时不会串行混乱std::lock_guard<std::mutex> lock(mutex_);// 按统一格式输出日志std::cout << "[" << level << "] " << msg << std::endl;}voidLogger::info(conststd::string& msg){// 调用统一日志接口,等级设为 INFOlog("INFO", msg);}voidLogger::warn(conststd::string& msg){// 调用统一日志接口,等级设为 WARNlog("WARN", msg);}voidLogger::error(conststd::string& msg){// 调用统一日志接口,等级设为 ERRORlog("ERROR", msg);}}  // namespace hjp

第 5 步:重写主程序


文件:src/main.cpp

#include"common/logger.h"// 引入日志模块头文件intmain(){// 输出程序启动日志    hjd::Logger::info("humanoid_joint_project start");// 返回 0,表示主程序正常结束return0;}

第 6 步:补一个 .gitignore


文件:.gitignore

# 忽略 build 目录中的编译产物/build/# 忽略目标文件*.o# 忽略静态库文件*.a# 忽略动态库文件*.so# 忽略编辑器临时文件*.swp# 忽略 macOS 系统生成的隐藏文件.DS_Store# 忽略日志目录中的日志文件logs/*.log

第 7 步:编译运行

在项目根目录执行:

cd buildcmake ..make -j./humanoid_joint_project

运行输出效果:

[INFO] humanoid_joint_project start

第 8 步:初始化 Git

在项目根目录执行:

git initgit add .git commit -m "init: bootstrap project and basic logger"

第 9 步:查看完整项目文件树

终端输入查看:tree -L 2

如果没有安装树:sudo apt install tree

humanoid_joint_project/├── CMakeLists.txt├── .gitignore├── build/├── config/├── docs/├── include/│   ├── common/│   │   └── logger.h│   ├── control/│   ├── drivers/│   ├── hal/│   ├── protocol/│   ├── sensors/│   └── simulation/├── logs/├── scripts/├── src/│   ├── common/│   │   └── logger.cpp│   ├── control/│   ├── drivers/│   ├── hal/│   ├── protocol/│   ├── sensors/│   ├── simulation/│   └── main.cpp└── test/

本次演示了如何搭建一个项目工程框架,并引入了”cmake“项目多文件管理编译思想,以及git项目版本管理初始化。

编译运行,演示项目雏形启动后,打印启动日志。


最新文章

随机文章