Windows下使用VS Code编译和构建LoRaWan开源节点代码


本文大部分转载自:https://blog.csdn.net/luxun12222/article/details/80756354
最近公司项目需要使用LoRa搭建物联网节点,需要编译和构建LoRaWan的开源代码。今天记录一下Windows下使用VS Code构建LoRaMac-node代码。

1.下载LoRaWan节点端开源代码

LoRaMac-node是LoRaWan开源代码,可以在github上下载到源代码,下载地址: LoRaMac-node

此文档下载的版本是 4.4.2(2019-07-19)版本

解压LoRaMac-node-4.4.2.zip
在这里插入图片描述
备注:编译LoRaMac-node项目的路径中不要出现中文,空格,或者目录名过长情况,有可能构建会出现位置异常。

2.构建LoRaMac-node的先决条件

需要安装CMake

条件:CMake版本 >= 3.6

下载CMake的Windows版本,编写此文档的Windows是x86_64版本,所以下载的是cmake-3.16.0-rc1-win64-x64.msi
在这里插入图片描述
在这里插入图片描述
安装cmake-3.12.0-rc1-win64-x64.msi,并且选择添加CMake环境变量

在这里插入图片描述
在系统环境变量Path中可以看到
在这里插入图片描述
安装完成,查看是否安装成功

在cmd输入命令:cmake --version
在这里插入图片描述
需要安装GNU ARM-Toolchain工具
访问ARM开发者网站下载GNU ARM嵌入式开发工具
在这里插入图片描述
安装gcc-arm-none-eabi-7-2017-q4-major-win32.exe程序
在这里插入图片描述
在系统环境变量Path中可以看到

安装完成,查看是否安装成功

在cmd输入命令:arm-none-eabi-gcc.exe --version

在这里插入图片描述
需要安装MSYS2(需要安装make)
MSYS2是Windows下模拟linux工具
在这里插入图片描述
安装msys2-x86_64-20180531.exe程序,安装完成自动打开MSYS2控制台
在这里插入图片描述

安装msys的make组件

在msys2控制台输入命令:pacman -S msys/make

在这里插入图片描述
测试make是否安装成功

在msys2控制台输入命令:make -v

在这里插入图片描述
安装MinGW64的GCC和libs(这里32位系统安装MinGW32,此文档使用的64位系统,所以选择MinGW64的GCC安装)

在msys2控制台输入命令:pacman -S mingw64/mingw-w64-x86_64-gcc 
32位系统:pacman -S mingw32/mingw-w64-i686-gcc

在这里插入图片描述

在msys2控制台输入命令:pacman -S mingw64/mingw-w64-x86_64-gcc-libs 
32位系统:pacman -S mingw32/mingw-w64-i686-gcc-libs

在这里插入图片描述

测试MinGW64(获得MinGW32)的GCC是否安装成功

在msys2控制台输入命令:gcc -v

在这里插入图片描述

2.1添加环境变量

创建MINGW_HOME变量
在这里插入图片描述
创建C_INCLUDE_PATH变量
在这里插入图片描述
创建LIBRARY_PATH变量
在这里插入图片描述
Path中添加MinGW的bin目录
在这里插入图片描述
需要安装OpenOCD
OpenOCD是一个开源的JTAG上位机程序, 配合JTAG调试协议,可以对嵌入式硬件设备进行指令集级别和寄存器级别的调试。

下载OpenOCD非官方二进制包

在这里插入图片描述
在这里插入图片描述
解压openocd-0.10.0.7z到C盘,并且OpenOCD目录必须是C:\openocd(如果不是必须设置环境变量OPENOCD_BIN=openocd的bin目录)

3.使用VS Code构建LoRaMac-node

下载VS Code并安装
VS Code是微软发布的一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。
在这里插入图片描述

安装构建必须的VS Code插件

VSCode构建LoRaMac-node代码需要插件C/C++,CMake,CMake Tools,Native Debug
在这里插入图片描述
在这里插入图片描述
安装完成点击“Reload”重新加载VS Code

在VS Code中打开LoRaMac-node项目目录

在这里插入图片描述
在这里插入图片描述
打开完成项目如下图:
在这里插入图片描述

配置项目

打开settings.json或者点击菜单“文件”->“首选项”->“设置”,进行编辑
在这里插入图片描述
选择“工作区设置”,在“cmake.configureSettings”之后追加

"cmake.preferredGenerators": [ 
    "MinGW Makefiles", 
    "Ninja", 
    "Unix Makefiles" 
] 

为什么写成这样参考这里:https://blog.csdn.net/xiaopangzi313/article/details/53115702
高级的参考这里:https://blog.csdn.net/fengzhongluoleidehua/article/details/79809756
如下图:
在这里插入图片描述
“cmake.configureSettings”之中添加key-value

// arm toolchain prefix path
"TOOLCHAIN_PREFIX": "C:/GNU_Tools_ARM_Embedded",
备注:这个路径与你的实际交叉编译工具路径信息对应bin目录的上一级目录
如下图:

在“用户设置”追加CMake的路径

如下图:
在这里插入图片描述
或者使用json直接配置:
// 设置cmake的路径
“cmake.cmakePath”: “C:/Program Files/CMake/bin/cmake.exe”,
在这里插入图片描述
在这里插入图片描述
配置CMake编译的Kit
在菜单“查看”->“命令面板”打开命令面板,或者使用快捷键打开(Ctrl+Shift+P)打开
在这里插入图片描述

输入cmake后,自动呈现cmake相关的选项

在这里插入图片描述

可以选择CMake: Scan for Kits(自动扫描CMake工具),也可以选择CMake:Edit user-local CMake kits(用户自定义CMake工具)

这里选择CMake:Edit user-local CMake kits

备注:使用CMake:Edit user-local CMake kits(用户自定义CMake kits)编辑保存之后,不要在选择CMake:Scan for Kits(自动扫描CMake工具), 会导致自定义配置清空需要重新配置的情况,CMake:Scan for Kits会扫描到添加到环境变量的CMake kits,为了避免多个kits冲突,不添加环境变量,使用用户自定义CMake kits比较好。

会打开cmake-kits.json文件,编辑在文件中添加自定义CMake kit

{
     "name": "GNU ARM ToolChain GCC",
     "compilers": {
     "CXX": "C:\\GNU_Tools_ARM_Embedded\\bin\\arm-none-eabi-g++.exe",
     "C": "C:\\GNU_Tools_ARM_Embedded\\bin\\arm-none-eabi-gcc.exe"
}

如下图:

在这里插入图片描述
在这里插入图片描述
选择刚才配置的GNU ARM Toolchain GCC工具
打开命令面板,输入cmake,选择CMake:Select a Kit

在这里插入图片描述

选择GNU ARM Toolchain GCC项
注意要出现这一选项可能需要软件重启下
在这里插入图片描述

配置成功在VS Code的左下角状态栏如下所示:

在这里插入图片描述

选择构建变量
根据自己的需求选择,这里选择Debug

打开命令面板,输入cmake,选择CMake:Set the current build variant

在这里插入图片描述
在这里插入图片描述

配置成功在VS Code的左下角状态栏如下所示:
在这里插入图片描述
我的实际如下图:
在这里插入图片描述

开始配置项目
打开命令面板,输入cmake,选择CMake:Configure

在这里插入图片描述

配置完成后,可以在VS Code的输出中看到如下图:

在这里插入图片描述

构建LoRaMac-node项目

打开命令面板,输入cmake,选择CMake:Build(构建所有)或者CMake:Build a target(构建某个特定目标)

在这里插入图片描述

构建LoRaMac项目完成如下图:

在这里插入图片描述
我的成功编译:
在这里插入图片描述
到这里构建完成, 如果需要构建其他Application就需要修改配置文件。

一些配置问题请安装以下软件尝试解决

安装mingw 下载
在这里插入图片描述
这里其实是下载的一个安装器,具体的安装是通过运行这个安装器来引导安装的
在这里插入图片描述
在这里插入图片描述
这里需要做出对应的选择,当然完全默认没有任何问题,我们这里采用默认,继续安装
在这里插入图片描述
完成
在这里插入图片描述
运行安装目录下:mingw-w64.bat进入运行环境
在这里插入图片描述
先建立一个文件夹,当然这个文件夹路径信息不可有中文、空格
编写main.cpp

#include <stdio.h>
int main()
{
    printf("hello\n");
    return 0;
}

编写CMake文件,保存名为:CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(Hello)
set(SOURCE main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE})

生成Make file,使用windows自带的powershell命令工具

mkdir build
cd build
cmake -G"Unix Makefiles" ../

出现问题:

CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "D:/tmp/build/CMakeFiles/CMakeOutput.log".

意思就是不能生成Unix Makefiles,这是缺少make程序造成的,
解决方法就是找到mingw安装目录下mingw32-make.exe拷贝一份并重命名为make.exe
在这里插入图片描述
再运行cmake -G"Unix Makefiles" ../
在这里插入图片描述
在这里插入图片描述
有了makefile这样就对了
编译
make
在这里插入图片描述
在这里插入图片描述
有了执行文件,在运行:
在这里插入图片描述
成功打印出hello。
依据mingw-w64.bat添加path,不用每次运行它进入环境
在这里插入图片描述
在这里插入图片描述

VS的一些配置

task.json编译运行的配置文件

{
    "version": "2.0.0",
    "tasks": [
        {//这个大括号里是‘构建(build)’任务
            "label": "build", //任务名称,可以更改,不过不建议改
            "type": "shell", //任务类型,process是vsc把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
            "command": "gcc", //编译命令,这里是gcc,编译c++的话换成g++
            "args": [    //方括号里是传给gcc命令的一系列参数,用于实现一些功能
                "${file}", //指定要编译的是当前文件
                "-o", //指定输出文件的路径和名称
                "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //承接上一步的-o,让可执行文件输出到源码文件所在的文件夹下的bin文件夹内,并且让它的名字和源码文件相同
                "-g", //生成和调试有关的信息
                //"-Wall", // 开启额外警告
                //"-static-libgcc",  // 静态链接libgcc
                "-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这一条会导致Win下输出中文乱码
                "-std=c11", // 语言标准,可根据自己的需要进行修改,写c++要换成c++的语言标准,比如c++11
            ],
            "group": {  //group表示‘组’,我们可以有很多的task,然后把他们放在一个‘组’里
                "kind": "build",//表示这一组任务类型是构建
                "isDefault": true//表示这个任务是当前这组任务中的默认任务
            },
            "presentation": { //执行这个任务时的一些其他设定
                "echo": true,//表示在执行任务时在终端要有输出
                "reveal": "always", //执行任务时是否跳转到终端面板,可以为always,silent,never
                "focus": false, //设为true后可以使执行task时焦点聚集在终端,但对编译来说,设为true没有意义,因为运行的时候才涉及到输入
                "panel": "new" //每次执行这个task时都新建一个终端面板,也可以设置为shared,共用一个面板,不过那样会出现‘任务将被终端重用’的提示,比较烦人 
            },
            "problemMatcher": "$gcc" //捕捉编译时编译器在终端里显示的报错信息,将其显示在vs code的‘问题’面板里
        },
        {//这个大括号里是‘运行(run)’任务,一些设置与上面的构建任务性质相同
            "label": "run",
            "type": "shell",
            "dependsOn": "build", //任务依赖,因为要运行必须先构建,所以执行这个任务前必须先执行build任务,
            "command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe", //执行exe文件,只需要指定这个exe文件在哪里就好
            "group": {
                "kind": "test", //这一组是‘测试’组,将run任务放在test组里方便我们用快捷键执行
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": true, //这个就设置为true了,运行任务后将焦点聚集到终端,方便进行输入
                "panel": "new"
            }
        }
    ]
}

VS code的调试快捷键是 F5,按下 F5,会出现调试器选择界面

launch.json文件就是调试相关的配置文件


{
    "version": "0.2.0",
    "configurations": [
        { //这个大括号里是我们的‘调试(Debug)’配置
            "name": "Debug", // 配置名称
            "type": "cppdbg",  // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
            "request": "launch",  // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",  // 将要进行调试的程序的路径
            "args": [],  // 程序调试时传递给程序的命令行参数,这里设为空即可
            "stopAtEntry": false,  // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${fileDirname}",  // 调试程序时的工作目录,此处为源码文件所在目录
            "environment": [],  // 环境变量,这里设为空即可
            "externalConsole": false, // 为true时使用单独的cmd窗口,跳出小黑框;设为false则是用vscode的内置终端,建议用内置终端
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,新手调试用不到
            "MIMode": "gdb", // 指定连接的调试器,gdb是minGW中的调试程序
            "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定调试器所在路径,如果你的minGW装在别的地方,则要改成你自己的路径,注意间隔是\\
            "preLaunchTask": "build" // 调试开始前执行的任务,我们在调试前要编译构建。与tasks.json的label相对应,名字要一样
    }]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值