当前位置:首页 > 系统教程 > 正文

LVGL-01:从零搭建LVGL工程(Linux+CMake)

LVGL-01:从零搭建LVGL工程(Linux+CMake)

副标题:手把手教你使用CMake在Linux上构建嵌入式GUI项目,小白也能轻松上手!

1. 前言

LVGL(Light and Versatile Graphics Library)是一款免费开源的嵌入式图形库,专为资源受限的嵌入式设备设计,提供丰富的GUI组件和流畅的动画效果。本教程作为LVGL系列的第一篇,将带领大家在Linux环境下,使用CMake构建工具从零搭建一个LVGL工程,为后续开发嵌入式GUI应用打下坚实基础。无论你是嵌入式初学者还是希望迁移到LVGL的开发者,这篇文章都将为你提供清晰的指引。

2. 准备工作

在开始之前,请确保你的Linux系统(如Ubuntu 20.04+)已经安装了以下工具:

  • CMake(版本3.13+):用于生成构建系统。安装命令:sudo apt install cmake
  • Git:用于克隆LVGL源码。安装:sudo apt install git
  • GCC/G++:编译C/C++代码。安装:sudo apt install build-essential
  • SDL2库(可选,用于模拟器运行):安装:sudo apt install libsdl2-dev

这些工具是构建LVGL工程的基础,请务必提前配置妥当。

3. 获取LVGL源码

LVGL官方仓库托管在GitHub上,我们直接通过Git克隆最新稳定版本(以v8.3.x为例):

git clone https://github.com/lvgl/lvgl.git --branch release/v8.3

同时,我们还需要LVGL的依赖库lv_drivers(用于驱动显示和触摸),以及一个简单的示例工程作为参考:

git clone https://github.com/lvgl/lv_drivers.gitgit clone https://github.com/lvgl/lv_examples.git

如果你希望保持工程整洁,可以只复制必要的文件,后续我们将手动整合。

4. 创建工程目录结构

让我们创建一个名为lvgl_linux_cmake的文件夹,并按照以下结构组织文件:

lvgl_linux_cmake/├── CMakeLists.txt          # 顶层CMake配置文件├── main.c                  # 主程序入口├── lvgl/                   # LVGL核心库(从克隆的仓库复制或链接)├── lv_drivers/             # LVGL驱动库└── lv_examples/            # 可选,用于参考示例

你可以直接将之前克隆的lvgllv_drivers文件夹复制到工程目录下,或者创建软链接以节省空间。

5. 编写CMakeLists.txt

CMake是构建LVGL工程的核心,我们需要正确配置包含目录、源文件以及链接选项。以下是一个适用于Linux桌面模拟的CMakeLists.txt示例:

cmake_minimum_required(VERSION 3.13)project(lvgl_linux_demo)set(CMAKE_C_STANDARD 99)set(CMAKE_CXX_STANDARD 11)# 查找SDL2(用于模拟显示)find_package(SDL2 REQUIRED)include_directories(${SDL2_INCLUDE_DIRS})# 添加LVGL核心库add_subdirectory(lvgl)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lvgl)# 添加LVGL驱动库add_subdirectory(lv_drivers)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/lv_drivers)# 添加可执行文件add_executable(lvgl_demo main.c)# 链接库target_link_libraries(lvgl_demo lvgl lv_drivers ${SDL2_LIBRARIES} m)

注意:LVGL本身已经包含CMake支持(其根目录下有CMakeLists.txt),所以我们直接用add_subdirectory引入即可。如果你不想修改LVGL源码,也可以手动指定源文件,但使用官方CMake更加简洁。

6. 编写主程序(main.c)

现在我们来编写一个简单的LVGL应用程序,初始化LVGL并创建一个带按钮的界面。在main.c中输入以下代码:

#include "lvgl/lvgl.h"#include "lv_drivers/display/sdl.h"#include "lv_drivers/indev/sdl_mouse.h"#include int main(void){    // 初始化LVGL    lv_init();        // 初始化SDL显示器    sdl_init();        // 注册显示驱动    static lv_disp_drv_t disp_drv;    lv_disp_drv_init(&disp_drv);    disp_drv.disp_flush = sdl_display_flush;    lv_disp_drv_register(&disp_drv);        // 注册鼠标输入驱动    static lv_indev_drv_t indev_drv;    lv_indev_drv_init(&indev_drv);    indev_drv.type = LV_INDEV_TYPE_POINTER;    indev_drv.read = sdl_mouse_read;    lv_indev_drv_register(&indev_drv);        // 创建一个简单的按钮    lv_obj_t *btn = lv_btn_create(lv_scr_act());    lv_obj_set_pos(btn, 100, 100);    lv_obj_set_size(btn, 120, 50);        lv_obj_t *label = lv_label_create(btn);    lv_label_set_text(label, "点击我");    lv_obj_center(label);        // 主循环    while(1) {        lv_task_handler();        usleep(5 * 1000); // 5ms延时,保持CPU占用低        sdl_display_flush_ready(); // 通知刷新完成    }        return 0;}

这段代码初始化了SDL模拟显示和鼠标输入,创建了一个带标签的按钮。对于初学者,这可能有些复杂,但不要担心,后续我们会逐步解释每一部分。

7. 编译和运行

在工程根目录下执行以下命令进行编译:

mkdir buildcd buildcmake ..make -j4

编译成功后,会生成可执行文件lvgl_demo,运行它:

./lvgl_demo
LVGL-01:从零搭建LVGL工程(Linux+CMake) LVGL  CMake Linux 嵌入式GUI 第1张

如果一切顺利,你会看到一个窗口,里面有一个按钮。这表明你的Linux + CMake + LVGL工程已经成功搭建!

8. 总结与下一步

通过本教程,你学会了如何在Linux环境下使用CMake构建一个基础的LVGL工程,并运行了一个简单的GUI程序。这是深入学习嵌入式GUI开发的第一步。在后续文章中,我们将探讨LVGL的更多特性,如样式、动画、多语言支持等,并将LVGL移植到真实的嵌入式硬件上。欢迎继续关注!


关键词:LVGL, CMake, Linux, 嵌入式GUI —— 本文围绕这四个核心概念展开,帮助初学者快速入门。