这篇文章主要讲解了“怎么用Visual Studio Code和CLion进行EOS开发”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Visual Studio Code和CLion进行EOS开发”吧!
首先,如果你还没有这些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默认存在这里用于编译。紧接着是externals和libraries。两个文件夹都包含用于使整个编译过程更容易的库。
项目结构中最后一个重要的东西是配置文件CMakeLists.txt。每个目录都有自己的带有命令的CMakeLists.txt文件。
可以在我们的repo中找到所有的文件夹和脚本的新项目结构。
让我们看一些配置文件,因为你需要知道如何使用它们。
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。它帮助我们自动化每个命令,只需点击几下。
首先,我们必须生成包含我们的自定义命令的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、Build和Generate ABI。它们执行三个shell脚本compile.sh,build.sh和generate.sh。前两个脚本基本上都是相同的,除了build.sh还进行了编译以外。可能大多数时候你会使用第二个。
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+r和cmd+i,但是你可以选择其他。这是你必须添加的json:
一旦你已经完成了所有的设置,现在准备在VS Code上开发EOS DApps吧.
与VS Code相比,设置CLion非常简单。当加载CLion中的架构时,IDE会自动在cmake-build-debug文件夹中创建所有生成文件。一旦准备就绪,就可以使用“⌘+F9”快捷方式执行实际构建。这就是你需要做的一切,太简单了吧?
但是,如果你想为CMake设置附加项,可以从Preferences – Build, Execution, Deployment中选择。
感谢各位的阅读,以上就是“怎么用Visual Studio Code和CLion进行EOS开发”的内容了,经过本文的学习后,相信大家对怎么用Visual Studio Code和CLion进行EOS开发这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。