win下VSCode with SDL2配置LVGL模拟器开发环境

win下VSCode with SDL2配置LVGL模拟器开发环境

首页模拟经营游戏开发模拟器2汉化版更新时间:2024-04-29
0. 序言

上篇文章 中, 我们在VSCode里搭建好了SDL2的开发环境, 以此为基础, 本文我们要搭建起LVGL模拟器的开发环境, 达到我们的最终目的.

本文也有个所谓的参考文章https://my.oschina.net/u/5732601/blog/5518641.

它和上篇文章中的参考文章是同一个作者的系列文章.

如果说上一篇的参考文章只是有些不详细不严谨和一些小坑的话, 那这篇参考文章就是巨坑!!

我一开始自然是参考它的方法操作, 可是编译始终是一堆错误, 怎么都编译不过. 我被它坑惨了, 掉在坑里, 想了各种方法, 各种尝试, 浪费了多少脑细胞, 浪费了大半天的时间, 还是爬不出来.

最终幡然醒悟, 抛弃它, 按照自己的理解, 摸索出自己的方法, 轻松搞定! 唉…

接下来本文就描述一下我摸索出的方法.

1. 基于LVGL最新版源码 的模拟器1.1 下载代码

我在网上看到很多搭建LVGL模拟器的文章, 都是基于github上lvgl/lv_port_pc_eclipse这个代码仓库来做的.

我们也选择它, 虽然它是For eclipse的, 其实只是目录下多了些eclipse相关的工程文件, 我们不用不理这些文件便是.

它也是用CMake编译的, 所以其实只要把这个仓库代码clone下来, 稍稍修改一下根目录下的CMakeList.txt文件即可顺利编译成功.

我摸索出的方法就是如此, 一点也不复杂麻烦, 改动的也很少.

下图是当前(@20230330)lvgl/lv_port_pc_eclipse这个仓库的一个截图:

可看到, 其下只有一个文件夹lvgl, 是个外链仓库, 就是LVGL本体的源码, 不过它不是LVGL源码的master分支(master分支目前是稳定版V8.3), 而是正在开发中V9.0的最新版分支(73b4460)代码, 仓库地址: https://github.com/lvgl/lvgl/tree/73b446015a06055e984cc26e5cba744096409895

下图是此仓库的当前截图.

BTW: 跑题一下, 在上图里, .gitignor这一行, 可发现 最新版的LVGL已经支持中文的拼音输入了, nice.

最正确的下载代码的方法, 应该是用下面命令就可以把所有代码都clone下来了.

git clone --recursive https://github.com/lvgl/lv_port_pc_eclipse.git

但是, 以往的经验, 众所周知的原因, 我们直接从github clone代码是很艰难的, 特别是这种带外链仓库的情况就更恼火.

所以, 我用的是下载zip的方式, 分别把2个仓库下载好, 然后再组装在一起.

不管用什么方法, 代码准备好就OK.

1.2 修改CMakeList.txt

打开代码根目录下的CMakeList.txt文件, 内容如下:

cmake_minimum_required(VERSION 3.10) project(lvgl) set(CMAKE_C_STANDARD 11)#C11 set(CMAKE_CXX_STANDARD 17)#C17 set(CMAKE_CXX_STANDARD_REQUIRED ON) include_DIRECTORIES(${PROJECT_SOURCE_DIR}) file(GLOB_RECURSE INCLUDES "./*.h" ) add_subdirectory(lvgl) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) SET(CMAKE_CXX_FLAGS "-O3") find_package(SDL2 REQUIRED SDL2) include_directories(${SDL2_INCLUDE_DIRS}) add_executable(main main.c mouse_cursor_icon.c ${SOURCES} ${INCLUDES}) add_compile_definitions(LV_CONF_INCLUDE_SIMPLE) target_link_libraries(main PRIVATE lvgl lvgl::examples lvgl::demos ${SDL2_LIBRARIES}) add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/main)

我修改后如下:

cmake_minimum_required(VERSION 3.10) project(lvgl) set(CMAKE_C_STANDARD 11)#C11 set(CMAKE_CXX_STANDARD 17)#C17 set(CMAKE_CXX_STANDARD_REQUIRED ON) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}) file(GLOB_RECURSE INCLUDES "./*.h" ) add_subdirectory(lvgl) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) SET(CMAKE_CXX_FLAGS "-O3") # find_package(SDL2 REQUIRED SDL2) # include_directories(${SDL2_INCLUDE_DIRS}) add_executable(aaa main.c mouse_cursor_icon.c ${SOURCES} ${INCLUDES}) add_compile_definitions(LV_CONF_INCLUDE_SIMPLE) target_link_libraries(aaa mingw32) # new add target_link_libraries(aaa lvgl lvgl::examples lvgl::demos ${SDL2_LIBRARIES}) target_link_libraries(aaa SDL2main) # new add target_link_libraries(aaa SDL2) # new add add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/aaa)

仅修改了5行:

另外, 我还编译目标--可执行文件名 改成了aaa, 这一点可以不用改

1.3 编译运行

OK, 都改好了, VSCode打开此代码目录就可以直接F7编译了.

不过这里有个需注意点, "编译目标--可执行文件名" 要和 代码根目录名 一致, 否则也会编译出错.

编译成功后, 会在根目录的bin目录下 生成exe文件, 运行效果如下:

2. 基于LVGL V7版 的模拟器

由于我的嵌入式设备上跑的是LVGL V7.11版本, 而且LVGL V8相对于V7变动不小, 很多API函数都变了.

所以我的模拟器的版本最好还是要用V7的, 唉, 还要继续搞.

不过搞定了一次, 套路都是一样的.

2.1 下载V7版代码

还是先下载代码, 还是在lvgl/lv_port_pc_eclipse这个仓库页面,

可看到这里有11个分支, 点进去

再点这里, 就可打开V7.0分支的代码仓库

这个代码仓库的情况如下图:

有3个子目录, 且都是外链仓库

还是用和前面一样的方法, 不管使用git clone --recursive命令, 还是下载zip组装, 把代码准备好就行.

2.2 修改CMakeList.txt

CMakeList.txt的修改套路还是一样, 我就直接放出我修改后的内容了

cmake_minimum_required(VERSION 3.10) project(lvgl) set(CMAKE_C_STANDARD 11)#C11 set(CMAKE_CXX_STANDARD 17)#C17 set(CMAKE_CXX_STANDARD_REQUIRED ON) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}) file(GLOB_RECURSE INCLUDES "lv_drivers/*.h" "lv_examples/*.h" "lvgl/*.h" "./*.h" ) file(GLOB_RECURSE SOURCES "lv_drivers/*.c" "lv_examples/*.c" "lvgl/*.c" ) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) # find_package(SDL2 REQUIRED SDL2) 注释掉 # include_directories(${SDL2_INCLUDE_DIRS}) 注释掉 add_executable(aaa main.c mouse_cursor_icon.c ui_power.c ${SOURCES} ${INCLUDES}) target_link_libraries(aaa mingw32) # new add target_link_libraries(aaa SDL2main) # new add # target_link_libraries(main PRIVATE SDL2 ) 注释掉 target_link_libraries(aaa SDL2) # new add add_custom_target (run COMMAND ${EXECUTABLE_OUTPUT_PATH}/aaa)

同样的方法, 注释掉它原文关于SDL2的行, 把我的3行target_link_libraries(...)加进去, 就改好了!

2.3 编译运行

还是要注意 编译目标--可执行文件名代码根目录名 的一致.

编译运行, 效果如下

OK, 全部搞定!

,
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved