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

  • 1.下载LoRaWan节点端开源代码
  • 2.构建LoRaMac-node的先决条件
    • 2.1添加环境变量
  • 3.使用VS Code构建LoRaMac-node
    • 安装构建必须的VS Code插件
    • 配置项目
    • 构建LoRaMac-node项目
  • 一些配置问题请安装以下软件尝试解决
    • VS的一些配置

本文大部分转载自: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相对应,名字要一样}]
}

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

  1. 在Windows下使用MinGW静态编译Assimp

    使用MinGW静态编译Assimp 到了5月份了,没有写一篇日志,于是自己从知识库里面拿出一篇文章充数吧.这次将要解说怎样在Windows下使用MinGW静态编译Assimp. Assimp是眼下比較 ...

  2. windows下Google Protocol Buffer 编译安装(vs)教程

    蒲公英的博客 分享技术带来的快乐 Kuaile.IN 搜索 首页 安卓相关 WordPress 主机相关 Linux相关 网络技术 电脑技术 编程技术 免费资源 当前位置: 首页 > 编程技术 ...

  3. ZYNQ LINUX开发笔记——windows下用xilinx SDK编译zynq linux app小程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ LINUX开发笔记--windows下用xilinx SDK编译zynq linux app小程序 前言 操作方法 总结 前 ...

  4. windows下使用Msys2安装编译Redis6.2

    windows下使用Msys2安装编译Redis6.2 最近项目上需要使用Redis,于是上网找了下windows下的版本,微软官方的版本停在了3.2版本,github上找了下最新的windows编译 ...

  5. 开源项目:windows下使用MinGW+msys编译ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.     FFmpeg是在Linux平台下开发的, ...

  6. windows下使用MinGW+msys编译ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.     FFmpeg是在Linux平台下开发的, ...

  7. linux子系统安装gromacs,科学网—Windows下GROMACS程序的编译 - 李继存的博文

    2015-12-07 22:12:05 总的来说, Windows下的GROMACS程序用于模拟意义不大, 对于长时间的模拟, 我都是放在Linux服务器上进行的. 但将Windows下的GROMAC ...

  8. windows 下使用 MinGW + msys 编译 ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.     FFmpeg是在Linux平台下开发的, ...

  9. c语言与qt编写安卓,Windows下Qt for Android 编译安卓C语言可执行程序

    作为 C/C++ 程序员,有时候我们希望在安卓上运行从 C/C++ 生成的可执行程序,而不是在 Java 中通过 jni 的方式来调用 C 动态库.有两个途径可以达到这个目的:一 作为 C/C++ 程 ...

最新文章

  1. 爬虫的系统框架组成-资源库
  2. mysql 数据库的同步问题
  3. php图片自动分页,WordPress点击图片自动进入下一分页代码【图片站福利】
  4. GetClientRect相当于GetWindowRect和ScreenToClient区别
  5. OpenDDS用idl生成自定义数据类型时遇到的一个问题
  6. openstack用户列表_什么是OpenStack超级用户?
  7. Go 语言基础(三)——基本数据类型
  8. java + testng wsdl 测试_在测试中使用XPATH断言的策略
  9. 几个简单的OpenCV程序
  10. D3 Geographies
  11. 最新MyEclipseIDEAWebStorm安装 激活
  12. 华为NP课程笔记28-IEEP课件摘录
  13. 计算机重启后打印机无法连接不上,笔记本之前连上了打印机,重启路由后就连不上了,什么原因...
  14. 开始写博客之学习编程的重要性
  15. 信息搜集快捷导航工具bug修复-光速启动
  16. 各大文字转语音软件对比,哪个比较好呢?
  17. 基于微信小程序的童装购买平台小程序
  18. ps命令查看进程详解
  19. endnote 教程
  20. java继承关键字extends

热门文章

  1. Ubuntu常用命令大全(珍藏版)
  2. 个人申请官方微信支付接口,即时到账!还支持个人小程序支付!附支付demo...
  3. 入门PCB设计之AD9电路板设计_杜洋工作室_学习笔记
  4. excel 两组数据交点_适用于安卓,苹果手机的Excel程序
  5. 鼠标连点器同时点多个位置_一台电脑登录多个微信,简单,按住ENTER,鼠标快速点,扫描OK...
  6. 互联网大厂高并发抢购系统架构设计
  7. 关于如何在sublime text3中添加字体问题解决,保姆级教程
  8. MULTIPLE CALL TO SEGMENT
  9. 改造HP Z Turbo Drive 转接卡在DELL Optiplex 3020平台上使用
  10. 详解ISO 13400文档(DoIP协议)-1