如何为EOS DAPP开发设置VS CODE和CLION


每个开发人员都需要一个良好的IDE,这是为他在项目的开发过程而设置的。这就是为什么我们创建了一个关于如何为EOS dApp开发设置VS CodeCLion的快速教程的原因。
我们还为VS Code创建了一些脚本,它们将自动执行您在终端中使用的一些命令。

Visual Studio代码设置

首先,如果您还没有安装一些VS代码扩展,请安装它们。通过它们开发dApp将非常有用:

  • C/C++ - IntelliSense, debugging, and code browsing for VS Code
  • CMake - CMake language support for Visual Studio Code
  • CMake Tools - Extended CMake support in Visual Studio Code
  • WebAssembly - Syntax highlight for WebAssembly textual representation

当我们开发EOSIO dApp时,我们在.hpp和.cpp文件中编写代码。但是,这只是整个过程的一小部分。大多数情况下,我们需要生成一些其他文件,我们将使用这些文件在区块链上部署合约,对其进行单元测试等。这就是CMake派上用场的地方。

CMake是一个用于控制软件编译过程的命令行工具。一旦在IDE中正确设置,它就会变得非常容易。

现在我们将使用CMake工具,我们应该对项目结构进行一些更改。我们将重用EOSIO项目的骨架,因为它拥有我们需要的一切。当然,我们做了一些小改动。

我们有一张图片显示了新的项目结构。让我们来看看。


首先,我们有build文件夹。这是放置所有编译内容的地方。您将使用的每个生成的文件都在那里。接下来是CMakeModules,其中包含一些有用的cmake模块,其中包含用于编译过程的自定义函数。

contracts是我们的核心文件夹。这是我们准备智能合约的地方。目前,eosioliblibc++musl都默认存在,因为它们用于编译。行中的下一行是externalslibraries。这两个文件夹都包含用于使整个编译过程更容易的库。

项目结构中最后一个重要的事情是配置文件 - CMakeLists.txt。每个目录都有自己的带有命令的CMakeLists.txt文件。

你可以在我们的仓库里找到所有文件夹和脚本的新项目结构在这里

CMakeLists

让我们看看一些配置文件,因为您需要知道如何使用它们。

  1. CMakeLists.txt(4)

这是设置编译过程的主要配置文件。您应该知道,在开发dApp时,需要设置项目名称。版本和语言是可选的。

# Set the minimum required version of cmake for a project
cmake_minimum_required(VERSION 3.5)

# Set a name, version, and enable languages for the entire project.
project( ProjectName )

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libraries/fc/CMakeModules")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")

# Load and run CMake code from a file or module.
include( GNUInstallDirs )
include( SetupTargetMacros )

# Set a normal, cache, or environment variable to a given value
set( CMAKE_CXX_STANDARD 14 )
set( CMAKE_CXX_EXTENSIONS ON )
set( CXX_STANDARD_REQUIRED ON)

set( CLI_CLIENT_EXECUTABLE_NAME cleos )
set( GUI_CLIENT_EXECUTABLE_NAME eosio )

set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")


# add defaults for openssl
if ("${OPENSSL_ROOT_DIR}" STREQUAL "")
   if (NOT "$ENV{OPENSSL_ROOT_DIR}" STREQUAL "")
      set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
      set(OPENSSL_INCLUDE_DIR ${OPENSSL_ROOT_DIR}/include)
   elseif (APPLE)
      set(OPENSSL_ROOT_DIR "/usr/local/opt/openssl")
      set(OPENSSL_INCLUDE_DIR "/usr/local/opt/openssl/include")
   elseif(UNIX AND NOT APPLE)
      set(OPENSSL_ROOT_DIR "/usr/include/openssl")
      set(OPENSSL_INCLUDE_DIR "/usr/include/openssl/include")
   else()
      message(FATAL_ERROR "openssl not found and don't know where to look, please specify OPENSSL_ROOT_DIR")
   endif()
endif()

if(UNIX)
  if(APPLE)
    set(whole_archive_flag "-force_load")
    set(no_whole_archive_flag "")
  else()
    set(whole_archive_flag "--whole-archive")
    set(no_whole_archive_flag "--no-whole-archive")
  endif()
else()
  set(whole_archive_flag "--whole-archive")
  set(no_whole_archive_flag "--no-whole-archive")
endif()

SET( Boost_USE_STATIC_LIBS ON CACHE STRING "ON or OFF" )
IF( WIN32 )
  SET(BOOST_ROOT $ENV{BOOST_ROOT})
  set(Boost_USE_MULTITHREADED ON)
  set(BOOST_ALL_DYN_LINK OFF) # force dynamic linking for all libraries
ENDIF(WIN32)
FIND_PACKAGE(Boost 1.66 REQUIRED COMPONENTS
    thread
    date_time
    filesystem
    system
    program_options
    signals
    serialization
    chrono
    unit_test_framework
    context
    locale
    iostreams)

# Add a subdirectory to the build.
add_subdirectory(externals)

include(wasm)

add_subdirectory(libraries)
add_subdirectory(contracts)

2. CMakeLists.txt(3)
第二个配置文件位于contracts文件夹中。应将每个新的智能合约添加为此配置中的子目录。因为合同不会编译,所以不要忘记这一步很重要。CMake不会知道。

set(DEFAULT_SYSTEM_INCLUDE_FOLDERS ${CMAKE_SOURCE_DIR}/contracts/libc++/upstream/include ${CMAKE_SOURCE_DIR}/contracts/musl/upstream/include ${Boost_INCLUDE_DIR})
set(STANDARD_INCLUDE_FOLDERS ${CMAKE_SOURCE_DIR}/contracts ${CMAKE_SOURCE_DIR}/externals/magic_get/include)

add_subdirectory(eosiolib)
add_subdirectory(musl)
add_subdirectory(libc++)

# Your contracts (add the name of the folder which contains you smart contract)
add_subdirectory(Players)

3. CMakeLists.txt(2)
每个智能合约都有自己的配置文件。在这里你需要注意每个合约有不同的目标,基本上,它是文件夹的名称。


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

# Change "Players" with the name of the folder containing your smart contracts
add_wast_executable(TARGET Players
  INCLUDE_FOLDERS "${STANDARD_INCLUDE_FOLDERS}"
  LIBRARIES libc libc++ eosiolib
  DESTINATION_FOLDER ${CMAKE_CURRENT_BINARY_DIR}
)

现在,当我们拥有新的项目结构时,我们必须制作自定义命令,这些命令将编译和构建我们所做的一切。可是怎么做呢?幸运的是,VS Code有一些很酷的东西叫做Tasks。它帮助我们只需点击几下即可自动执行每个命令。

VS代码中的任务

首先,我们必须生成将包含我们的自定义命令的tasks.json文件。按⇧+⌘+ P在VS Code中打开命令选项板,然后键入“Tasks”并选择“Configure Task”。

configure_task.png

下一步选择“Create tasks.json file from template”,然后选择“Others”

create_tasks.png

VS Code将创建一个名为“ .vscode ” 的文件夹,在其中,您可以找到tasks.json。现在我们需要添加命令。将以下代码复制并粘贴到tasks.json中:

{
    "version": "2.0.0",
    "reveal": "always",
    "options": {
        "cwd": "${workspaceRoot}"
    },
    "tasks": [
        {
            "label": "CMake",
            "type": "shell",
            "command": "sh ${workspaceRoot}/.vscode/scripts/compile.sh"
        },
        {
            "label": "Build",
            "type": "shell",
            "command": "sh ${workspaceRoot}/.vscode/scripts/build.sh"            
        },
        {
            "label": "Generate ABI",
            "type": "shell",
            "command": "sh ${workspaceRoot}/.vscode/scripts/generate.sh ${fileDirname} ${fileBasenameNoExtension}",
        }
    ]
}

我们创建了三个名为CMakeBuildGenerate ABI的自定义命令。它们执行三个shell脚本 - compile.shbuild.shgenerate.sh。前两个脚本基本上做同样的事情,除了build.sh同时编译和构建。可能大多数时候你会使用第二个。


# Create a build folder if it doesn't exist
mkdir -p build

# Change the current directory to "build"
cd build

# Create all the build files needed
cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug ..
# Create a build folder if it doesn't exist
mkdir -p build

# Change the current directory to "build"
cd build

# Create all the build files needed
cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=Debug ..

# Build
make

另一方面,第三个脚本 - generate.sh(Generate ABI)用于生成智能合约的abi。在构建期间需要生成一些文件。您必须在合同所在的文件夹中执行该命令。选择例如.cpp文件并运行它。

echo "Current working directory -" $1
cd $1

eosiocpp -g $2.abi $2.cpp

真棒!我们几乎准备好了VS代码设置。为了使整个过程变得更加容易,我们将为命令创建快捷方式。当你还在VS Code中时,请转到Preferences - Keyboard Shortcuts。将打开一个快捷方式窗口 - 找到并打开keybindings.json(它位于顶部):

一旦打开keybindings.json,我们将创建我们的快捷方式。对于我们的命令,我们选择了“cmd+e”,“cmd+r”和“cmd+i ”,但您可以选择其他命令。这是你必须添加的json:

完成所有操作后,您就可以开始在VS Code上开发EOS dApp🙂

CLION设置

与VS Code相比,设置CLion非常简单。在CLion中加载框架时,IDE会自动在cmake-build-debug文件夹中创建所有构建文件。准备就绪后,您可以使用⌘+ F9快捷键执行实际构建。这就是你应该做的一切,太容易了吗?

但是,如果要为CMake设置其他设置,可以从Preferences - Build, Execution, Deployment

[图片上传失败...(image-19bda6-1546922442243)]

有关在CLion中配置CMake的更多信息,请参阅IDE 的官方文档。真的很棒!

原文链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容