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

如何为EOS DAPP开发设置VS CODE和CLION_第1张图片

每个开发人员都需要一个良好的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项目的骨架,因为它拥有我们需要的一切。当然,我们做了一些小改动。

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


如何为EOS DAPP开发设置VS CODE和CLION_第2张图片

首先,我们有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”。

如何为EOS DAPP开发设置VS CODE和CLION_第3张图片
configure_task.png

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

如何为EOS DAPP开发设置VS CODE和CLION_第4张图片
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(它位于顶部):

如何为EOS DAPP开发设置VS CODE和CLION_第5张图片

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

如何为EOS DAPP开发设置VS CODE和CLION_第6张图片

完成所有操作后,您就可以开始在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 的官方文档。真的很棒!

原文链接

你可能感兴趣的:(如何为EOS DAPP开发设置VS CODE和CLION)