EOS開發IDE工具Visual Studio code 和CLion的配置

每一個開發人員都需要一個良好的IDE,EOS開發也是一樣,為項目開發過程構建一個良好的IDE環境是第一步。這就是為什么我們要寫這個如何使用VS Code或者CLion進行EOS開發的快速教程的原因。

我們還為VS Code創建了一些腳本,這些腳本將你在終端中使用的一些命令自動化。

設置Visual Studio Code

首先,如果你還沒有這些VS Code擴展的話,安裝一下。對于EOS Dapp開發,它們將非常有幫助:

  • C/C++ - VS Code的智能感知、調試和代碼瀏覽
  • CMake - Visual Studio Code的CMake語言支持
  • CMake Tools - Visual Studio Code擴展CMake支持
  • WebAssembly - 用于WebAssembly文本表示的語法高亮顯示

當我們開發EOSIO dApps時,我們需要編寫.hpp和.cpp文件中的代碼。然而,這是整個過程中很小的一部分。大多數時候,我們需要生成一些其他文件,這些文件將用于在區塊鏈上部署合約,進行單元測試等等。這就是CMake有用的地方。

CMake是用于控制軟件編譯過程的命令行工具。一旦它在你的IDE內正確設置的話,會使整個開發過程更加容易。

既然我們要使用CMake工具,我們應該對我們的項目結構做一些改變。我們將重用EOSIO項目的構架,因為它擁有我們所需要的一切。當然,我們有一些小的變化。

我們有一張圖片,展示了新的項目結構。讓我們看一看。

匯智網

首先,我們有了build文件夾。這是放置所有構建內容的地方。你所使用的每一個生成文件都在那里。接下來是CMakeModules,它包含一些有用的Cmake模塊,這些自定義模塊用于編譯過程。

contracts是我們的核心文件夾。這就是我們要放置智能合約的地方。目前,eosiolib, libc++musl默認存在這里用于編譯。緊接著是externalslibraries。兩個文件夾都包含用于使整個編譯過程更容易的庫。

項目結構中最后一個重要的東西是配置文件CMakeLists.txt。每個目錄都有自己的帶有命令的CMakeLists.txt文件。

可以在我們的repo中找到所有的文件夾和腳本的新項目結構。

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)

每個智能合約都有自己的配置文件。這里需要注意的是,每個合約都有不同的TARGET,大部分情況下,它就是文件夾的名稱。

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 Code的Tasks

首先,我們必須生成包含我們的自定義命令的tasks.json文件。按?+?+P打開VS代碼中的command palette,然后鍵入““Tasks”并選擇“Configure Task”。

匯智網

然后下一步選擇Create tasks.json file from template,然后Others

匯智網

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}",
        }
    ]
}

我們已經創建了三個自定義命令,命名為CMake、BuildGenerate ABI。它們執行三個shell腳本compile.sh,build.shgenerate.sh。前兩個腳本基本上都是相同的,除了build.sh還進行了編譯以外??赡艽蠖鄶禃r候你會使用第二個。

compile.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 ..

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 ..

# Build
make

另一方面,使用第三個腳本generate.sh(生成智能合約ABI)。在生成過程中需要生成一些文件。必須在合約文件夾內執行命令。選擇一個.cpp文件并運行它。

generate.sh

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

eosiocpp -g $2.abi $2.cpp

令人驚嘆的!我們已經準備好了VS Code。為了使整個開發變得更容易,我們將為我們的命令創建快捷方式。當你仍然在VS代碼中時,點擊Preferences – Keyboard Shortcuts??旖莘绞酱翱谡业讲⒋蜷_keybindings.json(它在頂部):

匯智網

一旦keybindings.json打開,我們將創建快捷方式。對于我們的命令,我們選擇了cmd+e、cmd+rcmd+i,但是你可以選擇其他。這是你必須添加的json:

匯智網

一旦你已經完成了所有的設置,現在準備在VS Code上開發EOS DApps吧.

CLion 設置

與VS Code相比,設置CLion非常簡單。當加載CLion中的架構時,IDE會自動在cmake-build-debug文件夾中創建所有生成文件。一旦準備就緒,就可以使用“?+F9”快捷方式執行實際構建。這就是你需要做的一切,太簡單了吧?

但是,如果你想為CMake設置附加項,可以從Preferences – Build, Execution, Deployment中選擇。

匯智網

更多關于配置CLion中的CMake的信息,你可以在CLion IDE的官方文檔中找到。寫的非常好!

=========================================================

分享一個交互式的在線編程實戰,EOS智能合約與DApp開發入門

EOS教程

本課程幫助你快速入門EOS區塊鏈去中心化應用的開發,內容涵蓋EOS工具鏈、賬戶與錢包、發行代幣、智能合約開發與部署、使用代碼與智能合約交互等核心知識點,最后綜合運用各知識點完成一個便簽DApp的開發。

  • web3j教程,主要是針對java和android程序員進行區塊鏈以太坊開發的web3j詳解。
  • 以太坊教程,主要介紹智能合約與dapp應用開發,適合入門。
  • 以太坊開發,主要是介紹使用node.js、mongodb、區塊鏈、ipfs實現去中心化電商DApp實戰,適合進階。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鏈以太坊開發的詳解。
  • php以太坊,主要是介紹使用php進行智能合約開發交互,進行賬號創建、交易、轉賬、代幣開發以及過濾器和事件等內容。
  • C#以太坊,主要講解如何使用C#開發基于.Net的以太坊應用,包括賬戶管理、狀態與交易、智能合約開發與交互、過濾器和事件等。

這里是原文

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容