基于vscode搭建LVGL环境
前言
目前网上windows
仿真LVGL
的资料都是比较久远的,不太适合现有的开发,因此重新整理了一下资料.
目标:
使用Vscode
进行LVGL
开发和仿真.
关键词: LVGL
, vscode
,llvm
,cmake
,windows
环境配置
编译器目前使用的是llvm-MinGW-msvcrt
:Releases · mstorsjo/llvm-mingw (github.com)
LVGL
官方提供了vscode
的demo
:lvgl/lv_port_pc_vscode (github.com),不过官方只在linux和mac做了适配,在windows下还需要自己修改下参数
LVGL
在vscode
的仿真是基于SDL
的,因此也需要下载下Releases · libsdl-org/SDL (github.com) .注意下载版本为:SDL2-devel-2.30.6-mingw.zip
Vsocde
就常用的插件,这里调试用的codeLLDB
,自己下载下.
编译器下载了加入环境变量,这里就不细说了
SDL
下载后放到一个常用的位置即可,不需要加入环境变量,加入后也没啥用,只需要记住解压到的位置就行
通过以下指令拉取最新代码
git clone --recursive https://github.com/lvgl/lv_port_pc_vscode
代码编译
使用code打开simulator.code-workspace
工作区,使用cmaketools
正常配置,选择上述下载的编译器即可.
这时候编译会报找不到SDL
的错误.
打开CmakeLists.txt
,添加SDL
的查找路径.
list(APPEND CMAKE_PREFIX_PATH "D:/Program Files/SDL_MINGW/")
set(SDL2_NO_MWINDOWS 1) # 设置为0的话不显示控制台,也就看不到打印信息
find_package(SDL2 REQUIRED SDL2)
这个时候就能正常配置了,但是编译不通过,
error: call to undeclared library function 'memmove' with type 'void *(void *, const void *, unsigned long long)'; ISO C99 and later do not support implicit function declarations
还需要修改几个编译器指令,需要修改的后面写了注释
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_options(lvgl PRIVATE
-pedantic-errors
-Wall
# -Wclobbered 注释掉
-Wdeprecated
-Wdouble-promotion
-Wempty-body
-Wextra
-Wformat-security
# -Wmaybe-uninitialized 注释掉
# -Wmissing-prototypes
-Wpointer-arith
-Wmultichar
-Wno-pedantic # ignored for now, we convert functions to pointers for propertis table.
-Wreturn-type
-Wshadow
-Wshift-negative-value
-Wsizeof-pointer-memaccess
-Wtype-limits
-Wundef
-Wuninitialized
-Wunreachable-code
-Wfloat-conversion
-Wstrict-aliasing
-Wno-implicit-function-declaration #增加该项,不然会报memmove找不到
)
target_compile_options(main PRIVATE -fsanitize=address,undefined)#删除leak
target_link_options(main PRIVATE -fsanitize=address,undefined)#删除leak
还需要修改main.c
,不然会报error: undefined symbol: SDL_main
#include "lvgl/demos/lv_demos.h"
#include LV_SDL_INCLUDE_PATH //包含SDL的头文件
或者修改main
函数为SDL_main
函数
这时候就能正常编译了,但是还没法运行,因为缺少SDL.dll
运行时,需要手动复制到可执行文件路径下,也可以在CmakeLists.txt
中添加后处理执行
add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main DEPENDS main)
# 添加下面这行语句
add_custom_command(
TARGET main POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${SDL2_DIR}/../x86_64-w64-mingw32/bin/SDL2.dll" ${EXECUTABLE_OUTPUT_PATH}
)
然后就可以愉快的运行了
调试
打开simulator.code-workspace
找到LLVM
,修改cppdbg
为lldb
{
"name": "Debug LVGL demo with LLVM",
"type": "lldb",
"request": "launch",
"program": "${workspaceFolder}/bin/main",
"args": [],
"cwd": "${workspaceFolder}",
"preLaunchTask": "Build",
"stopAtEntry": false,
"MIMode": "lldb"
},
然后就可以调试了