【rust】rust条件编译
在c语言中,条件编译是一个非常好用的功能,那么rust中如何实现条件编译呢?
rust的条件编译需要两个部分,一个是fratures,另一个是cfg。Cargo feature是一个非常强大的功能,可以提供条件编译和可选依赖项的高级特性,这里只用条件编译功能
1 条件编译
在C语言中,条件编译需要先使用#defien XXX定义变量,然后再使用#ifdef XXX, #endif判断编译条件。那么在rust语言中如何实现呢?
1.1 定义变量
这一步相当于C语言中的变量的定义,即#defien XXX功能。
在cargo.toml文件中使用feature,使用方式如下:
[features]
dbug = []
udug = []
上述代码相当于是有了两个编译条件
1.2 条件编译
在C语言中,条件编译的实现是#ifdef,在rust中则是使用#[cfg()]或者cfg!宏实现,代码如下:
#[cfg(feature = "dbus")]
{println!("dbus");printf_dbus();
}// 或者
if cfg!(feature = "dbus") {println!("dbus");printf_dbus();
}
1.3 整个文件都需要使用条件编译
当整个文件都需要使用条件编译的时候,可以直接在文件的最开始使用#[cfg()]。假设dbus.rs整体都需要条件编译,示例如下:
#[cfg(feature = "dbus")]
pub mod debus {struct xxxx{}pub fn dbus_xxxx() {}
}
使用该文件中的函数
mod dbus;
use crate::dbus::debus::*;fn main()
{#[cfg(feature = "dbus")]{dbus_xxxx();}
}
1.4 编译代码
使用条件编译,在编译代码的时候需要使用下面命令,就可以将dbus代码编译进去。
cargo build --features "dbus"
默认编译
在编译代码不使用 --reatures选项的时候,代码会编译一个叫做default的默认字段,当没有任何默认需要编译的条件时,该字段可以省略,如下所示:
[features]
dbug = []
udug = []
如果在默认编译个时候需要编译dbug部分代码,则default部分可以写成如下方式:
[features]
default = ["dbug",]
dbug = []
udug = []
2 代码
代码下载:rust条件编译
目录结构

cargo.toml
[package]
name = "feature_learn"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies][features]
default = []
dbus = []
ubus = []
main.rs
mod dbus;
#[cfg(feature = "dbus")]
use crate::dbus::debus::*;
// use crate::dbus::debus as debus;fn main() {println!("Hello, world!");#[cfg(feature = "dbus")] {println!("dbus");printf_dbus();}#[cfg(feature = "ubus")] {println!("ubus");} println!("default");// if cfg!(feature = "dbus") {// println!("dbus");// printf_dbus();// } else if cfg!(feature = "dbus")// {// println!("ubus");// } else {// println!("default")// };
}
dbug.rs
#[cfg(feature = "dbus")]
pub mod debus {
struct Dbus {arg1:i32,arg2:i32,arg3:i32,
}pub fn printf_dbus()
{let dbus = Dbus {arg1:1,arg2:2,arg3:3,};println!("dbus: {} {} {}", dbus.arg1, dbus.arg2, dbus.arg3);
}
}
相关文章:
【rust】rust条件编译
在c语言中,条件编译是一个非常好用的功能,那么rust中如何实现条件编译呢? rust的条件编译需要两个部分,一个是fratures,另一个是cfg。Cargo feature是一个非常强大的功能,可以提供条件编译和可选依赖项的高级特性&…...
一键文本提示实现图像对象高质量剪切与透明背景生成
按照提示词裁剪 按照边框裁剪 要实现您描述的功能,即通过一个文本提示就能自动从图片中切割出指定的对象并生成一个带有透明背景的新图像,这需要一个结合了先进的计算机视觉技术和自然语言处理能力的系统。这样的系统可以理解输入的文本指令,并将其转化为对图像内容的精确分…...
游戏客服精华回复快捷语大全
以黑神话悟空为代表的国内的游戏行业,最近发展非常迅猛,大量游戏玩家需要足够的游戏客服支持,这里整理了游戏客服精华回复快捷语,涵盖了接待客户,游戏级数,游戏外挂,游戏要求,游戏特…...
国内版Microsoft Teams 基础版部署方案
目录 前言Microsoft Teams简介部署前的准备 环境需求账户和许可网络要求部署步骤 初步配置和设置安装Microsoft Teams客户端Teams管理中心配置用户管理 用户添加与分配角色与权限管理通讯与协作 团队和频道管理即时消息和会议功能文件共享与协作安全性与合规性 数据保护措施合规…...
计算机网络 ---- OSI参考模型TCP/IP模型
目录 一、OSI参考模型 1.1 学习路线 1.2 OSI参考模型和TCP/IP模型 1.3 具体设备与具体层次对应关系 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1.3.4 传输层 1.3.5 会话层、表示层、应用层 1.4 各层次数据传输单位 二、TCP/IP模型 2.1 学习路线 2.2 TCP/I…...
在Windows环境下部署Java的Web项目集成工具的整体流程和详细步骤
好的,以下是一份关于“Windows环境下部署Java的Web项目集成工具”的手把手操作流程,由浅入深,先整体后分部: 一、引言 在现代软件开发中,Java作为一种广泛应用的编程语言,其Web项目开发尤为常见。为了提高…...
9.18作业
提示并输入一个字符串,统计该字符串中字母、数字、空格、其他字符的个数并输出 代码展示 #include <iostream>using namespace std;int main() {string str;int countc 0; // 字母计数int countn 0; // 数字计数int count 0; // 空格计数int counto 0;…...
【算法】滑动窗口—最小覆盖子串
题目 ”最小覆盖子串“问题,难度为Hard,题目如下: 给你两个字符串 S 和 T,请你在 S 中找到包含 T 中全部字母的最短子串。如果 S 中没有这样一个子串,则算法返回空串,如果存在这样一个子串,则可…...
“Fast-forward“ in git-pull result
当你执行 git pull 并且结果显示 Fast-forward 时,这意味着你的本地分支可以直接快进到远程分支的最新提交,没有任何冲突或者需要合并的内容。具体来说,Fast-forward 是一种合并方式,它的特点是将当前分支的指针直接移动到远程分支…...
Oracle(133)如何创建表空间(Tablespace)?
在Oracle数据库中,表空间(Tablespace)是存储数据的逻辑单位,它由一个或多个数据文件组成。表空间是数据库数据管理的基本结构,了解如何创建表空间对于数据库管理员至关重要。 创建表空间的基本语法 创建表空间的基本…...
Linux中权限和指令
💥1、Linux基本指令 1.1 mv 指令 mv指令是move的缩写,用来移动或重命名文件、目录,经常用来备份文件或目录。 mv old_name new_name: 重命名文件或目录mv file /path/to/directory: 移动文件到指定目录 roothcss-ecs…...
本地镜像发布到阿里云
本地镜像发布到阿里云 登录阿里云容器镜像服务配置 Docker 登录阿里云容器镜像服务标记你的 Docker 镜像推送镜像到阿里云验证使用阿里云镜像注意事项 将 Docker 本地镜像发布到阿里云(Alibaba Cloud)容器镜像服务(Container Registry&#x…...
【Linux】【Vim】Vim 基础
Vim/Gvim 基础 文本编辑基础编辑操作符命令和位移改变文本重复改动Visual 模式移动文本(复制、粘贴)文本对象替换模式 光标移动以 word 为单位移动行首和行尾行内指定单字符移动到匹配的括号光标移动到指定行滚屏简单查找 /string标记 分屏vimdiff 文本编辑 基础编辑 Normal 模…...
计算机人工智能前沿进展-大语言模型方向-2024-09-18
计算机人工智能前沿进展-大语言模型方向-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗卫生服务中的应…...
ubuntu24安装vivado24(安装并解决若干错误)
目录 安装方法:问题1:解决办法: 问题2:解决方法: 安装完成: 安装方法: 注意:内存最好预留80G空闲的。 安装好大小: 安装依赖库: sudo apt-get update sud…...
CSS实现文本溢出省略号或完整显示
目录 前言1. 省略号2. 完整展示3. Demo 前言 文本内容超出容器宽度的问题,为了保持页面布局的整洁,通常会使用省略号来隐藏多余的内容 一共有两种方式: 设定省略号完整展示 1. 省略号 文本溢出时显示省略号 .item-value {flex-basis: 7…...
three.js PropertyBinding和PropertyMixer
PropertyBinding 对场景图中某一真实属性的引用,内部使用。 构造器 PropertyBinding( rootNode : Object3D, path, parsedPath ) -- rootNode: -- path -- parsedPath (可选) 属性 # .path : Number # .parsedPath : Number # .node : Number # .rootNode …...
ssh远程连接try1账号切换tips
1,创建拥有sudo权限的用户: 在root下 sudo adduser bio sudo vim /etc/sudoers //修改添加如下: bio ALL(ALL) ALL //bio用户就拥有了root权限参考:https://github.com/isLishude/blog/issues/70 2,修改ssh配置 …...
C++之第十二课
课程列表 哎呀呀,失踪人口回归了!(前段时间跑去B站了,久等了) 今天来讲——数组 有一道题是这样的: 有n个数,请输出其中最大的数。 原来我们就要: int a,b,c... 但是——数组…...
Linux硬连接、软连接和复制的区别
硬连接、软连接和复制在Linux系统中的主要区别体现在以下三点: 文件链接的方式文件独立性文件系统的操作上。 一、硬连接 1. 硬连接是通过ln命令创建的,它为文件创建别名,与源文件共享同一inode号码,因此硬连接和源文件实际…...
【等保三级Java安全加固实战指南】:20年专家亲授7大高危漏洞修复清单与合规落地路径
第一章:等保三级Java安全加固的合规基线与实施全景图等保三级对Java应用系统提出了覆盖身份鉴别、访问控制、安全审计、通信保密性、代码安全及运行环境防护等多维度强制性要求。其合规基线并非单一技术点的叠加,而是以《GB/T 22239-2019 信息安全技术 网…...
SiameseUIE中文-base效果对比:在CLUE-NER和COTE-ABSA双基准测试
SiameseUIE中文-base效果对比:在CLUE-NER和COTE-ABSA双基准测试 想找一个开箱即用、效果又好的中文信息抽取工具?今天我们来聊聊阿里巴巴达摩院出品的SiameseUIE中文-base模型。这可不是一个普通的模型,它是一个“通用信息抽取”模型&#x…...
原神高帧率解锁终极方案:一键突破60帧限制的完全指南
原神高帧率解锁终极方案:一键突破60帧限制的完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想象一下这样的场景:你在蒙德的原野上自由奔跑,角…...
Qwen3.5-9B-AWQ-4bit参数调优实战:温度=0.7时中文回答质量与响应速度平衡点
Qwen3.5-9B-AWQ-4bit参数调优实战:温度0.7时中文回答质量与响应速度平衡点 1. 模型概述与参数调优背景 Qwen3.5-9B-AWQ-4bit是一个支持图像理解的多模态模型,能够结合上传图片与文字提示词输出中文分析结果。在实际应用中,我们发现温度参数…...
造相Z-Image文生图模型v2:3步搭建你的专属AI画师
造相Z-Image文生图模型v2:3步搭建你的专属AI画师 1. 为什么选择Z-Image v2作为你的AI画师 在众多文生图模型中,造相Z-Image v2以其独特的优势脱颖而出。作为阿里通义万相团队开源的高性能模型,它原生支持768768及以上分辨率的高清图像生成&…...
TinyUPnP:嵌入式设备轻量级UPnP端口映射实现
1. TinyUPnP:面向嵌入式平台的轻量级UPnP IGD客户端实现 TinyUPnP 是一个专为资源受限嵌入式系统设计的极简 UPnP(Universal Plug and Play)Internet Gateway Device(IGD)客户端库,核心目标是 在无用户干预…...
ESP-IDF嵌入式类型工具:轻量级字节与位操作库
1. 项目概述 esp_type_utils 是面向 ESP-IDF 生态的轻量级类型工具组件,专为嵌入式底层开发中高频出现的字节级数据操作与字符串格式化需求而设计。它并非 ESP-IDF 官方 SDK 的一部分,而是由开发者 Eric Gionet(K0I05)维护的开源…...
VHD/VHDX 数据守护:BAT位图校验与修复
VHD/VHDX 数据守护:BAT位图校验与修复VHD(Virtual Hard Disk)和 VHDX(Virtual Hard Disk v2)是微软 Hyper-V 等虚拟化平台常用的虚拟磁盘格式。在这些虚拟磁盘文件中,区块分配表(Block Allocati…...
老生常谈:聊聊mysql幻读问题?
之前有位小伙伴美团三面,一直被追求「幻读是否被 MySQL 可重复度隔离级别彻底解决了?」之前我也提到过,MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了࿰…...
戴森球计划FactoryBluePrints蓝图库:从新手到专家的终极工厂建设指南
戴森球计划FactoryBluePrints蓝图库:从新手到专家的终极工厂建设指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints蓝图库是戴森球计划游戏…...
