Cmake-2

视觉slam g2o 编译出现 Cmake Error:By not providing “FindG2O.cmake” in CMAKE_MODULE_PATH错误 COULD NOT FIND A PACKAGE,CONFIGURATION FILE PROVIDED BY “G2O” ,G2OCONFIG.CMAKE,G2O-CONFIG.CMAKE 在学习slam十四讲的时候,成功安装编译了g2o,但是在运行g2o_curve_fitting代码时出现错误,提示如下: CMake Error at CMakeLists.txt:8 (find_pack... 阅读详情
target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           )

把配置文件写到二进制树中。

 

# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

上面的命令指定C++的标准。

Step 2:增加一个库

把自定义的库文件放到子目录:MathFunctions;库包含头文件:MathFunctions.h和源文件:mysqrt.cxx;有一个方法是mysqrt。

add_library(MathFunctions mysqrt.cxx)的cmakeLists.txt到MathFunctions的子目录中。

为了使用mathFunctions的功能,高一级的cmakeLists的写法如下:

# add the MathFunctions library
add_subdirectory(MathFunctions)

# add the executable
add_executable(Tutorial tutorial.cxx)

target_link_libraries(Tutorial PUBLIC MathFunctions)

# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
                          "${PROJECT_BINARY_DIR}"
                          "${PROJECT_SOURCE_DIR}/MathFunctions"
                          )

为了让这个math库变为可配置的。

option(USE_MYMATH "Use tutorial provided math implementation" ON)

# configure a header file to pass some of the CMake settings
# to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)

改变上一级的cmakelist.txt:

if(USE_MYMATH)
  add_subdirectory(MathFunctions)
  list(APPEND EXTRA_LIBS MathFunctions)
  list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
endif()

# add the executable
add_executable(Tutorial tutorial.cxx)

target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})

# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           ${EXTRA_INCLUDES}
                           )

在 in tutorial.cxx中使用宏定义:

#ifdef USE_MYMATH
#  include "MathFunctions.h"
#endif
#ifdef USE_MYMATH
  const double outputValue = mysqrt(inputValue);
#else
  const double outputValue = sqrt(inputValue);
#endif

编译:

cmake ../Step2 -DUSE_MYMATH=OFF

Step 3:添加库的使用要求

1)接口的使用,是用户需要的,需要修改MathFunctions/CMakeLists.txt增加下面一行:

 

target_include_directories(MathFunctions
          INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
          )

如果增加了上面一行,那就可以修改上一级的CMakeLists.txt:

if(USE_MYMATH)
  add_subdirectory(MathFunctions)
  list(APPEND EXTRA_LIBS MathFunctions)
endif()

And here:

target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           )

 

 

 

【Window环境下使用MSYS2搭建CMake + MinGW环境】 Windows环境下使用MSYS2 MinGW搭建CMake的hello world 整个应用测试。 阅读详情

相关推荐

详解使用ament_cmake构建ROS2功能包

ROS2的构建系统叫做,它是基于CMake改进而来的。接下来将详细介绍一下ament。

火柴的初心的博客 7541

ROS2-CMake学习

跨平台构建系统生成器生成 Makefile(Linux)、Visual Studio 项目(Windows)等ROS 2 的官方构建工具(通过 ament_cmake)ROS 2 的 CMake 构建系统基于 CMake,提供 ROS 2 特有功能简化依赖管理、消息生成、包导出等目录结构├── msg/├── srv/示例消息# 消息定义示例服务# 请求---# 响应示例动作# 目标---# 结果---# 反馈# 1. 生成接口# 2. 创建节点rclcpp。

FairLikeSnow的博客 1067

Use Catch2 with Cmake

创建如下文件目录: ├───build/ ├───src/ └───Sort.cpp ├───tests/ └───lib/ └───SortTest.cpp └───CMakeLists.txt ├─── CMakeLists.txt 编辑根目录下的 CMakeLists.txt cmake_minimum_required(VERSION 3.10) # project name and version project(Example VERSION 1....

vivianliulu的博客 1131

CMake实战:qmake转cmake神器 - pro2cmake.py

pro2cmake.py是Qt6提供的实用工具,用于将.pro项目文件自动转换为CMakeLists.txt。该脚本位于Qt安装目录的libexec或bin子目录,支持处理项目类型、源文件、Qt模块等基本配置,并提供--project、--qt-version等选项进行定制化转换。对于复杂情况如子项目、条件编译等需要手动调整,转换后需检查文件路径、依赖项等关键配置。使用时可配合--verbose选项调试,建议保留原始配置注释以便核对。该工具简化了Qt项目从qmake到CMake的迁移过程,但转换后仍需全面测

红军不怕远征难,万水千山只等闲 2165

g2o编译出现的问题及解决办法 By not providing "FindG2O.cmake" in CMAKE_MODULE_PATH this project has

** 在安装完该g2o之后 运行一些程序 如高翔的ch6 代码会出现如下错误 ** CMake Warning at CMakeLists.txt:10 (FIND_PACKAGE): By not providing "FindG2O.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package co...

qq_40267214的博客 1万+

AndroidStudio2.2下利用CMake编译方式的NDK opencv开发

AndroidStudio2.2对C++开发做了很好的支持,默认使用CMake构建编译,以前做Andorid下的opencv开发都是基于Android.mk方式是编译和配置opencv依赖的加载,本文通过配置CMakeList.txt来完成NDK opencv开发。 第一步、建立一个支持C++的工程,如下: 第二步、建立一个NDKloader类,如下: public class

ddjjll8877的博客 9789

qmake2cmake

qmake2cmake

TemetNosce的博客 966

用AI+Playwright实现零代码UI自动化测试:以登录页面为例的实战指南

本文详细介绍了如何利用AI与Playwright结合实现零代码UI自动化测试,特别以登录页面为例进行实战演示。通过自然语言描述生成测试脚本,大幅降低技术门槛,提升测试效率,并支持跨浏览器验证。适合非技术人员快速上手专业级自动化测试。

weixin_28842269的博客 402

在 cmake_modules 目录下编写 FindG2O.cmake 以集成 G2O

负责自动查找 G2O 头文件和库文件,使 CMake 可以轻松集成 G2O。通过宏查找 G2O 的各个子模块,包括核心库、求解器和数据类型库。通过G2O_FOUND变量确认 G2O 是否被正确找到,以便 CMake 配置 G2O 依赖。这样,我们就可以在 CMake 项目中使用直接找到 G2O 并进行链接。

keshi12354的博客 695

关于 MCU 芯片外围电路的快速入门介绍

MCU 外围电路的核心是“围绕 MCU 需求,搭建稳定、匹配的外部支撑”,入门阶段无需掌握复杂设计,只需先吃透供电、复位、时钟、IO 驱动、基础通信这五大模块,再逐步扩展存储、显示、传感器等进阶功能。实践中多调试、多参考成熟方案,是快速掌握外围电路设计的关键。码字不易,若觉得本文对你有用,欢迎,相关技术热点时时看🔥🔥🔥​​​…

JiaWen的博客 1645

如何读懂CiteSpace图谱?科研小白必看的节点颜色/年轮/聚类解读手册

本文详细解析CiteSpace图谱的核心视觉元素,包括节点颜色、年轮和聚类标识,帮助科研人员准确解读数据分析结果。通过生物医学案例展示如何从图谱中识别关键文献和研究趋势,提供五步系统解读法和常见错误规避策略,助力科研小白快速掌握文献计量分析技巧。

weixin_29179311的博客 316

介绍qmake2cmake

Introducing qmake2cmake 介绍qmake2cmake Wednesday April 13, 2022 byJörg Bornemann|Comments ​2022年4月13日星期三 Jörg Bornemann | 评论 Qt's own QMake project files have been converted with a Python script namedpro2cmakethat lives in qtbase. This script is sp...

aggs1990的专栏 1913

代谢组学数据分析实战:用R语言从PCA、PLS-DA到OPLS-DA一步步搞定(附代码)

本文详细介绍了使用R语言进行代谢组学数据分析的全流程,从数据预处理到PCA、PLS-DA和OPLS-DA模型构建与验证。通过实际案例和代码示例,帮助研究者掌握关键分析技术,提升数据解读能力,特别适合生命科学领域的研究人员。

weixin_28689507的博客 133

proj2cmake:让Visual Studio项目轻松拥抱CMake

proj2cmake:让Visual Studio项目轻松拥抱CMake 【下载地址】proj2cmake将VisualStudio项目和解决方案转换为CMake proj2cmake 是一款实用工具,专为将Visual Studio项目及解决方案无缝转换为CMake构建系统而设计。通过它,开发者可以轻松在不同平台和编译...

gitblog_06706的博客 461

RK3568平台(内存篇)DDR定频修改

如果需要DDR定频,则还需要注释掉其他多余的DDR频率,保留一个即可,例如注释掉opp-528000000、opp-1068000000、opp-1560000000,保留opp-2750000000则是定频最大频率。如果回退必须将 dmc_opp_table节点 的其他频率打开,否则系统无法选择到其他频率运行。ddr频点不对,先把ddr变频关掉,关闭后系统就不会一直重启了,以下是修改DDR频点的。rk3588修改定频节点在rk3588s.dtsi 的 dmc: dmc。

weixin_49303682的博客 1621

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

proj2cmake: 将Visual Studio项目和解决方案转换为CMake

proj2cmake: 将Visual Studio项目和解决方案转换为CMake 【下载地址】proj2cmake将VisualStudio项目和解决方案转换为CMake proj2cmake 是一款实用工具,专为将Visual Studio项目及解决方案无缝转换为CMake构建系统而设计。通过它,开发者可以轻松在不同...

gitblog_06740的博客 971

软件设计师---钉子户

软件设计师---钉子户

我从不打没有准备的仗! 2万+

libssh2项目CMake构建指南

libssh2是一个功能强大的客户端C库,实现了SSH2协议。本文将详细介绍如何使用CMake构建系统来编译和安装libssh2库,帮助开发者快速上手并集成到自己的项目中。 ## 构建准备 在开始构建libssh2之前,需要确保系统中已安装以下组件: 1. **CMake 3.7或更高版本**:现代跨平台构建系统 2. **加密库之一**(必须选择至少一个): - OpenSSL:广泛...

gitblog_00599的博客 444

21天教你学会PCIe专栏(14)--安全性考虑

1.1 定义安全性(Security):安全性是指保护系统免受未经授权的访问、攻击和破坏,确保数据的机密性、完整性和可用性。1.2 重要性数据保护:保护敏感数据,防止数据泄露和篡改。系统防护:防止恶意攻击,确保系统的稳定性和可靠性。合规性:满足行业标准和法律法规的要求,避免法律风险。用户信任:提高用户对系统的信任度,增强市场竞争力。通过今天的学习,你应该对PCIe安全性的重要性和常见威胁有了深入的了解,掌握了实施安全措施的方法和工具,以及安全开发的最佳实践。

xiaoheshang_123的博客 850

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【ROS2】ament_CMake (1-overview)

ament_cmake是ROS 2生态中基于CMake扩展的C++核心构建系统,旨在标准化ROS 2包的构建流程。它通过package.xml声明依赖关系,在CMakeLists.txt中实现编译、安装等逻辑,提供自动化依赖管理(如ament_target_dependencies)和统一构建路径。相比原生CMake,ament_cmake简化了ROS 2特有功能的实现,支持跨平台构建和扩展功能(如测试、文档生成)。作为ROS 2开发的基础组件,它使开发者能专注于代码逻辑,提升开发效率。

Ray Home 1019

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

编译CMake-2.8.12.2

Reference:http://www.linuxfromscratch.org/blfs/view/7.5/general/cmake.html Beyond Linux®From Scratch - Version 7.5 Chapter13.Programming Prev Check-0.9.12 Next CVS-1.11.23 Up Home CMak...

Manketon的专栏 812

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

配置g2o库时,出现“FindG2O.cmake“错误, By not providing “FindG2O.cmake“ in CMAKE_MODULE_PATH

在配置g2o库时,出现"FindG2O.cmake"错误,这个错误表明CMake在寻找G2O库时未能找到相应的配置文件。本文为了解决这个问题将其安装路径CMAKE_MODULE_PATH添加到Cmakelists文件。

keshi12354的博客 942

CMake 如何查找 Python2和Python3

摘要:CMake的find_package(Python2 COMPONENTS Interpreter Development NumPy)命令用于查找Python2相关组件。虽然Python2不是C++库,但CMake通过内置的FindPython2.cmake模块定位解释器、开发头文件/库及NumPy组件。该命令会搜索系统路径和环境变量,并将结果存储在特定变量中(如Python2_EXECUTABLE、Python2_INCLUDE_DIRS等),方便在C++项目中使用Python2功能。

Tipriest的博客 519

CMake新手必看:用Qt官方工具pro2cmake.py快速入门现代构建系统

本文为Qt开发者提供了使用官方工具pro2cmake.py从qmake平滑迁移到CMake的实战指南。通过解析工具安装、基础转换步骤及复杂项目处理,帮助开发者高效入门现代构建系统,实现项目构建的现代化与跨平台兼容。

zz67890的博客 364

解决cmake 找不到 g2o 问题

解决:cmake_modules 在源码里有,安装g2o后,安装目录中会有 cmake_modules 文件夹,有些人但我没有,于是,我将 cmake_modules 从源码里手动拷贝到安装目录 /usr/local/g2o2016/,并且把cmake_modules 中的 findg2o.cmake 内所有 “NO_DEFAULT_PATH” 注释掉,据说不注释掉 set 不生效。源码安装了 g2o 到 /usr/local/g2o2016/解决:最后加 gomp 或 -lgomp。

天下对手教会少林武僧 1654
上一篇: Cmake教程
下一篇: Cmake-3
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值