工欲善其事,必先利其器!我们已经写了自己的第一个hello
合约,随着合约功能越来越复杂,我们需要一个趁手的兵器用用才行。本文就介绍一款神器。过去几年,不羁用过了不少IDE。不过最近两年,不羁发现了VS Code,如获至宝,并一直使用至今。
安装VS Code
VS Code功能非常强大,我之前用过eclipse、sublime text、Atom,然后最好的用的还是VS Code。我现在写Go用它,写reactjs和nodejs用它,如今写C++还是用它。没错,它就是这么牛,这么强大。话不多说,下载安装。
链接在这里:https://code.visualstudio.com/Download。
下载后的安装过程比较傻瓜,我就不多介绍了。不过为了能在编写C++代码时行云流水,我们需要一个插件作为辅助。
C/C++ 插件
如上图所示,在左边有个插件按钮,点开,会显示上面这样的一个插件列表,标星星的那个就是我已经安装的插件C/C++
。你可以在上面的搜索栏里输入C/C
。看到它之后,点一下它,就能在右边的主窗口中看见一个绿色的安装按钮了。
安装成功之后,按照提示重启一下VS code,插件即可生效。
打开workspace
还记得我们在上篇文章中,建立的~/eos-workspace
(是的,我钟爱$HOME目录)文件夹吗?我们已经写的hello合约就在里面。
我们在VS Code里打开这个文件夹:
File -> Open...
,(我的系统用的是英文系统,如果你用的是中文系统,对应的菜单命令应该是:文件——>打开...
,so easy 对吧,后面我就不再对我这些菜单做翻译了)。然后选择刚刚的那个文件夹就好了。
之后你应该能看到这么个界面了:
你肯定发现了,1
位置有我们的hello
合约代码所在的文件夹了;当你点开顶部的View
菜单,会弹出2
这个菜单,你点开Terminal
这个选项,就会看到在底部有个3
窗口,并自动生成了一个终端,可以执行命令行。这个终端非常有用,可以节省不少时间。建议你记下你自己操作系统上打开这个终端的快捷键,在2
位置,terminal这个子菜单的右边。
现在你可以在打开的终端里执行编译hello
合约的命令了。注意,打开终端后的默认目录,是我们的workspace目录:~/eos-workspace
。
cd hello
eosiocpp -o ./hello.wast ./hello.cpp
eosiocpp -g ./hello.abi ./hello.cpp
简化编译流程
编译是我们经常做的事情,让我们写个脚本来简化编译流程吧,把如下脚本保存后MakeContract
文件,
#/bin/bash
cd $1
/Users/james/eos/build/tools/eosiocpp -o ./$1.wast ./$1.cpp
/Users/james/eos/build/tools/eosiocpp -g ./$1.abi ./$1.cpp
如果你是windows系统,请把它改为bat脚本。
然后我们为MakeContract
添加可执行属性(windows系统由于是根据文件后缀来判断是否可执行的,所以你可以把写好的bat文件,加上.bat后缀即可):
chmod a+x MakeContract
如此,我们就可以这样来编译hello
合约了:
./MakeContract hello
假如将来我们写了个智能合约,名字叫game,我们把合约代码放在了game文件夹下,与hello同级,那么我们就可以这样来编译game:
./MakeContract game
还记得,VS Code 是自带 terminal的,我们可以用快捷键打开terminal,然后执行上面的命令来编译合约,非常快捷。更多的快捷键可以从网上查找,或者直接从官网查找,用户也可以自定义快捷键。这里就不做赘述。
更快捷的编译
如果你嫌输入命令太麻烦,可以配置task来编译命令,可以在task
菜单里配置新的task,VS Code会自动帮你建一个task.json文件,我们把这个task.json文件改成类似下面这样:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "buildHello",
"type": "shell",
"command": "./MakeContract",
"args": [
"hello"
],
"group": "build",
// Use the standard MS compiler pattern to detect errors, warnings and infos
"problemMatcher": "$msCompile"
}
]
}
这是一个json格式的配置文件,非常清晰;如果有多个智能合约,可以直接在tasks数组里配置。比如像下面这样,我新建了一个truelove智能合约,可以在tasks里这样配置:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "buildHello",
"type": "shell",
"command": "./MakeContract",
"args": [
"hello"
],
"group": "build",
// Use the standard MS compiler pattern to detect errors, warnings and infos
"problemMatcher": "$msCompile"
},
{
"label": "buildTruelove",
"type": "shell",
"command": "./MakeContract",
"args": [
"truelove"
],
"group": "build",
// Use the standard MS compiler pattern to detect errors, warnings and infos
"problemMatcher": "$msCompile"
}
]
}
你可能会问,配置这个有啥用啊。这时,我们可以这样操作,使用快捷键调出命令窗口,在mac上快捷键是:Command + p
,然后输入task,并按个空格,这时,会出现下面的样子:
你会发现出来一个下拉框,正是我们刚刚配置的两个task的名字,这时你可以上下选择task,按回车即可执行该task。
如果你讨厌输入命令呢,就可以使用这个方面来执行编译了。
让阅读代码更方便
VS Code有个很好的功能,你可能发现了。当你把鼠标放在函数被调用时的函数名上,同时按住Command键,你会发现你的鼠标在经过函数位置时,会变成小手图标,并会显示一个小窗口,在该小窗口里是该函数定义的代码。当你点击的时候,就会跳转到函数定义部分。
不过,有时侯,也并不总是奏效。因为VS Code可能会找不到我们的头文件,这个时候,就需要我们主动帮助一下它了。
比如,在上图中,你会看到有时候,你引用的某个头文件下面有个波浪号,这代表这个头文件找不到,或者它引用的某个头文件找不到。
如果我们点击一下它,会发现VS Code在这个头文件位置会显示出一个小黄灯的图标。我们点下这个图标,它会给出如何解决这个问题的提示,比如它会提醒你找出丢失的头文件位置,并把它加到当前 workspace 目录的下的.vscode/c_cpp_properties.json
里,如果这个文件不存在,它会帮你生成一个的。你只需要按照提示来操作就好了。
你可能会问,我怎么知道是那个文件找不到呢?别急,你看上图中的最下面的箭头指向区域,有个PROBLEMS
的tab窗口,这个会显示出详细内容的。
好了,VS Code功能很强大,很难一篇文章就介绍完。这篇文章算是个入门吧,剩下的功能就靠你探索了。
明天我们继续EOS智能合约的内容。
简介:不羁,一名程序员;专研EOS技术,玩转EOS智能合约开发。
微信公众号:know_it_well
知识星球地址:https://t.zsxq.com/QvbuzFM