平时写代码使用VSCode居多,写Python以及前端代码时基本不用过多地配置即可开始编写代码、运行,也算是开箱即用的程度。但涉及到Golang这样需要编译调试的开发语言就需要进行一些配置了,尤其是需要跨平台运行时就要用到交叉编译。
先科普一下交叉编译的概念:交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
开发环境使用Windows以及macOS居多,但编译出来的程序往往是在Linux上运行,如果直接在服务器上进行编译就比较麻烦,所以就需要用到交叉编译。
交叉编译也可以用命令行进行,但每次都复制粘贴命令进行编译也麻烦,还容易出错。VSCode这款优秀的编辑器就提供了把命令固定下来的功能:tasks.json。
网上与VSCode运行调试、编译相关的文章基本都会提到launch.json和tasks.json,有些人往往搞不清两者的区别,可以简单理解为:launch.json是运行调试的配置,tasks.json是构建编译配置。
tasks.json 为 launch.json 提供支持: preLaunchTask 属性: 在 launch.json 中,可以通过 preLaunchTask 属性指定一个tasks.json 中定义的任务,这样在启动调试之前,VS Code 会先执行这个任务。
tasks.json交叉编译golang程序示例:
{
"version": "2.0.0",
"tasks": [
{
"type": "go",
"label": "spiderbuf_linux",//出现在命令运行框的标题,随意起
"command": "build",
"args": [
"-o",
"${workspaceFolder}/bin/spiderbuf",//构建出来的二进制文件路径
],
"options": {
"env": {
"GOOS": "linux",//指定最终要运行的操作系统类型
"GOARCH": "amd64"//指定最终要运行的CPU架构,通常为amd64\arm64
}
},
"problemMatcher": [
"$go"
],
"group": "build",
"detail": "build linux amd64 version"//出现在命令运行框架的描述,随意写
}
]
}
以上的配置就是构建一个适合linux x86环境的二进制文件,tasks是一个数组,可以有多组配置,配置之间用英文逗号分隔。
执行task.json
在vscode界面按快捷键ctrl + shift + p(macOS快捷键为:command + shift + p),然后输入task查找Tasks执行命令,找到Tasks: Run Build Task,然后回车确认。
接下来就会出来我们配置中的任务,对应label和detail,根据这两个内容判断当前要执行的编译任务(如:要编译amd64还是arm64),然后选中并回车。此时vscode就会调用go命令进行编译,并在args指定的路径生成最终的二进制文件。
我配置了两个不同的CPU架构的编译任务,所以我的截图中会有两个内容:
值得一提的是,如果不是交叉编译,即只需要编译出当前开发环境能运行的二进制文件时,tasks.json中options的内容可以省略。