开发工具 EOS 开发终极神器-vscode (你绝对找不到的干货)

lome · 2018年04月19日 · 最后由 576498007 回复于 2018年07月03日 · 2817 次阅读
本帖已被设为精华帖!

EOS开发终极神器-vscode(你绝对找不到的干货)

声明:本文由EOS中文社区,原创首发,转载请注明原文地址,谢谢。

前言:最近一直苦于EOS开发没有好用的IDE,用了很多,试了很多,都让人觉得有些差强人意。于是乎笔者在经过,长时间的查找实践中,终于找到了eos开发终极神器-vscode。当然这个只是笔者经过测试开发尝试后的一家之言。

话不多说下面进入正题。

vscode 安装

  • 下载

大家开一去官网下载vscode:https://code.visualstudio.com/Download。下载安装都很方便。

  • 安装
    • win windows下的安装,相信大家都能顺利完成
    • linux linux下,官网下载的都是linux可执行文件.deb,.rpm。直接打开安装即可,也很方便。
    • Mac os下,这个本人没有试过,应该安装很简单。

配置

vscode安装起来非常简单,配置起来也非常容易。

首先,EOS是用c++开发的,所以打开vscode之后先装c++ 插件:

ms-vscode.cpptools

这个插件是必须的,其他的,也有很多插件非常有用,大家可以自己积极去发现。

运行测试

首先打开本地的eos,然后会看到最下面有许多选项,如图所示:

build all 测试

  1. 点击build:后的[all],可以选择构建的区域.选择[all]可以构建整个eos项目.
  2. 点击build[all]进行构建。 如图所示:

智能合约构建

1.创建智能合约,这里我用的是`hello`的例子,来说明。 首先是hello.cpp

#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>

//用eosio命名空间
using namespace eosio;

//所有的智能合约都继承自contract类
class hello : public eosio::contract {

  public:
      using contract::contract;

      /// @abi action
      void hi( account_name user ) {
         print( "Hello, ", name{user} );
      }

};
EOSIO_ABI( hello, (hi) )

hello.abi:

{
  "types": [],
  "structs": [{
      "name": "hi",
      "base": "",
      "fields": [{
          "name": "user",
          "type": "account_name"
        }
      ]
    }
  ],
  "actions": [{
      "name": "hi",
      "type": "hi"
    }
  ],
  "tables": []
}

CMakeLists.txt:

file(GLOB ABI_FILES "*.abi")
configure_file("${ABI_FILES}" "${CMAKE_CURRENT_BINARY_DIR}" COPYONLY)

add_wast_executable(TARGET hello
  INCLUDE_FOLDERS "${STANDARD_INCLUDE_FOLDERS}"
  LIBRARIES libc++ libc eosiolib
  DESTINATION_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
)

然后在`eos/contracts`目录下的CMakeLists.txt中加入hello: 添加命令:

add_subdirectory(hello)

然后build[all].后根据cmake文件来自动构建。构建完成以后,你可以在build/contracts目录下,看到构建好的hello,如图所示:

构建完成以后,你就可以在build后选择[hello],单独进行编译。

代码提示

在左下角点击设置,加入以下配置,并且保存,就会出现代码提示了:

"[cpp]": {
    "editor.autoIndent": true,
    "editor.quickSuggestions":true
  },
"[c]": {
    "editor.quickSuggestions":true
},
"cmake-tools-helper.auto_set_cpptools_target": true,

代码提示效果如图所示:

vscode Debug

debug方式很简单,选择debug:后,你所debug的代码,打上断点,然后点击debug就可以调试了,效果如图所示:

一切都是如此简单,一切都是如此便捷。

共收到 34 条回复

可以的 手动点赞

strahe 将本帖设为了精华贴 04月19日 17:05

步骤不够详细,是不是需要先clone好eos代码 然后安装对应的依赖和cmake相关。整个eos项目可以正常编译之后才可以用vscode来build和debug吧

loganwu 回复

是的。

是不是还要安装cmake插件 我在vscode下面并没有看到build debug选项,是不是还需要安装cmake-tools相关工具。感觉文章写得太简略 意义不大

好是好东西,不过看完你的帖子,知道的还是知道,不知道的依然不知道。有一点可以确定是。通过你的贴子,知道vscode可以用来开发eos,之前我用CLion,感觉不错,就是不能代码跳转,并且,CLion有时候真的很耗cpu,很耗,很耗。

moncy0905 回复

也许能帮助到其他不知道的人呢?

只支持 非 Windows平台吧?能在Windows下编译不?

感谢,😀 根据楼主的帖子,结合摸索,终于确定了vscode这个IDE最适合EOS开发。

vscode确实可以,,,我是mac下用的,下载vscode解压后,直接运行vscode.app.不过运行后,需要先安装几个插件,包括搂主说的 c/c++ 插件,还有 cMake插件,cmake插件有几个,我都安装了,不太确定哪些是需要,哪些是不需要(没有安装cmake插件前是不能编译的)。然后就可以编译了。感谢楼主开荒之路。

改一下build设置,看能否用eosiocpp来一键生成abi和wast文件?

看到有人说插件不全的,下面是我装的插件:

Cmake
Cmake-tools

设置是这样的:

{
    "workbench.iconTheme": "vscode-icons",
    "cmake-tools-helper.cmake_download_path": "/home/lome/.vscode/extensions/maddouri.cmake-tools-helper-0.2.1/cmake_download",
    "[cpp]": {
        "editor.autoIndent": true,
        "editor.quickSuggestions":true
      },
    "[c]": {
        "editor.quickSuggestions":true
    },
    "cmake-tools-helper.auto_set_cpptools_target": true,
}

再附一张图:

aben 回复

按照教程build以后,会在build/contracts下生成所有的文件。

没有cmake-tools-helper.auto_set_cpptools_target这个属性啊。。。。

我的eos在虚拟机里,vscode在window下,这种情况下,我还能愉快的利用vscode吗?比如build,debug

eos代码和vscode都放在window下,也可以编译和调试吧?

li 回复

-> 安装cmake-tools-helper插件

编译时候出下面错误,能给个提示吗 CMake Error at libraries/fc/CMakeModules/FindBoost.cmake:1129 (message): [cmake] Unable to find the requested Boost libraries. [cmake] [cmake] Unable to find the Boost header files. Please set BOOST_ROOT to the root [cmake] directory containing Boost or BOOST_INCLUDEDIR to the directory containing [cmake] Boost's headers. [cmake] Call Stack (most recent call first): [cmake] CMakeLists.txt:88 (FIND_PACKAGE)

请注意看报错信息:[cmake]无法找到请求的Boost库。 [cmake] [cmake]无法找到Boost头文件。 请将BOOST_ROOT设置为包含Boost或BOOST_INCLUDEDIR的根[cmake]目录到包含[cmake] Boost标头的目录。 [cmake]调用堆栈(最近调用优先):[cmake] CMakeLists.txt:88(FIND_PACKAGE)

li 回复

这个错误是由于,代码clone下来,直接导入ide,进行build.这样是不行的。要先执行./eosio_build.sh后才能在ide里面build.但是现在出现新的错误。最关键就是开始写合约的时候,好多坑啊。

eos@eos-virtual-machine:~/eos-project/eos$ cat /home/eos/eos-project/eos/build/CMakeFiles/CMakeError.log Determining if the pthread_create exist failed with the following output: Change Dir: /home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp

Run Build Command:"/usr/bin/make" "cmTC_1eadc/fast" /usr/bin/make -f CMakeFiles/cmTC_1eadc.dir/build.make CMakeFiles/cmTC_1eadc.dir/build make[1]: Entering directory '/home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp' Building C object CMakeFiles/cmTC_1eadc.dir/CheckSymbolExists.c.o /usr/bin/clang-4.0 -o CMakeFiles/cmTC_1eadc.dir/CheckSymbolExists.c.o -c /home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c Linking C executable cmTC_1eadc /usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1eadc.dir/link.txt --verbose=1 /usr/bin/clang-4.0 -rdynamic CMakeFiles/cmTC_1eadc.dir/CheckSymbolExists.c.o -o cmTC_1eadc CMakeFiles/cmTC_1eadc.dir/CheckSymbolExists.c.o: In function main': /home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:(.text+0x19): undefined reference topthread_create' clang: error: linker command failed with exit code 1 (use -v to see invocation) CMakeFiles/cmTC_1eadc.dir/build.make:86: recipe for target 'cmTC_1eadc' failed make[1]: *** [cmTC_1eadc] Error 1 make[1]: Leaving directory '/home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp' Makefile:126: recipe for target 'cmTC_1eadc/fast' failed make: *** [cmTC_1eadc/fast] Error 2

File /home/eos/eos-project/eos/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c: /* */ #include

int main(int argc, char** argv) { (void)argv; #ifndef pthread_create return ((int*)(&pthread_create))[argc]; #else (void)argc; return 0; #endif }

li 回复

还是少了一步,代码build后要进行sudo make install.然后才能追加新的合约。。。。。。一天时间没有了。继续前进。

我一直就用这个😀

ms-vscode.cpptools 这个扩展找不到呢

请问vs code dubug 的时候launch.json 怎么设置,能把你的设置贴出来么?

在下方显示的是 No Kit Selected是为什么? 提示 Cannot configure without a Kit !

liudliu1992 回复

这个我也不知道。

vance01633 回复

更新了好几次,刚试了现在的版本launch.json已经不能用了,稍后我调试一下需要的话会贴出来。

@liudliu1992 请问这个问题解决了么,我也遇到了,我vscode是在windows下的,和这个有关系吗?

@lome 我在windows已经有vscode了,需要在ubuntu里再安装vscode么

@lome 我根据你的设置,可以正常build all,但是单独选 hello build的时候报错,如下

/Users/xxx/BlockChain/eos/contracts/hello/../eosiolib/types.h:25:18: error: redefinition of 'time' as different kind of symbol
typedef uint32_t time;
/Users/xxx/BlockChain/eos/contracts/hello/../eosiolib/print.h:86:26: error: unknown type name 'int128_t'
                 ^

请问这是什么问题,还有 单独build hello 的用途是什么? 🙏

没有引入type name 'int128_t'类型

谢谢您的文章,但是对于一个新手来说照着您这文章做起来实在是吃力,您能把细节更新一下么,谢谢您了😉

Failed to run MSBuild command:

C:/Program Files (x86)/MSBuild/14.0/bin/MSBuild.exe

to get the value of VCTargetsPath:

Microsoft (R) Build Engine version 14.0.25420.1 Copyright (C) Microsoft Corporation. All rights reserved.

Build started 2018/7/3 17:06:56. Project "c:\eos\eos\build\CMakeFiles\3.12.0-rc1\VCTargetsPath.vcxproj" on node 1 (default targets). C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140\Toolset.targets(34,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [c:\eos\eos\build\CMakeFiles\3.12.0-rc1\VCTargetsPath.vcxproj] Done Building Project "c:\eos\eos\build\CMakeFiles\3.12.0-rc1\VCTargetsPath.vcxproj" (default targets) -- FAILED.

Build FAILED.

"c:\eos\eos\build\CMakeFiles\3.12.0-rc1\VCTargetsPath.vcxproj" (default target) (1) -> (Desktop_PlatformPrepareForBuild target) -> C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Platforms\Win32\PlatformToolsets\v140\Toolset.targets(34,5): error MSB8036: The Windows SDK version 8.1 was not found. Install the required version of Windows SDK or change the SDK version in the project property pages or by right-clicking the solution and selecting "Retarget solution". [c:\eos\eos\build\CMakeFiles\3.12.0-rc1\VCTargetsPath.vcxproj]

0 Warning(s) 1 Error(s)

Time Elapsed 00:00:00.18

Exit code: 1

这个问题如何解决啊谢谢楼主

大佬帮解决一下真的很着急😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册