#预处理器 # #src #walk-dir #c-compiler

cpprs

在Rust源文件上使用C预处理器

1个不稳定版本

0.1.0 2020年10月11日

#730编程语言

自定义许可证

9KB
147

cpp-rs

将以下内容放入你的 build.rs 以使用Rust的C预处理器。

示例用法

fn main() {
    walk_dir(CCompiler::GCC, "src")
}

这将使用GCC预处理器预处理器 .cpprs 源文件在 src/

查看lzo-macros示例。

已知缺陷

C预处理器将丢弃以 # 开头的任何行,因此例如:

#[macro_use]

将会被丢弃。


lib.rs:

示例

构建

你可能想在你的 build.rs 中包含以下内容:

use cpprs::{walk_src_preprocess, CCompiler};

fn main() {
walk_src_preprocess(CCompiler::GCC, vec![])
}

这将使用GCC预处理器预处理器 .cpprs 源文件在 src/

代码

假设你在 src/lib.cpprs 中有以下内容:

#include <minilzo.h>

pub enum LzoError {
LzoOk = LZO_E_OK,
LzoError = LZO_E_ERROR,
LzoOutOfMemory = LZO_E_OUT_OF_MEMORY,
LzoNotCompressible = LZO_E_NOT_COMPRESSIBLE,
LzoInputOverrun = LZO_E_INPUT_OVERRUN,
LzoOutputOverrun = LZO_E_OUTPUT_OVERRUN,
LzoLookbehindOverrun = LZO_E_LOOKBEHIND_OVERRUN,
LzoEofNotFound = LZO_E_EOF_NOT_FOUND,
LzoInputNotConsumed = LZO_E_INPUT_NOT_CONSUMED,
LzoNotYetImplemented = LZO_E_NOT_YET_IMPLEMENTED,
LzoInvalidArgument = LZO_E_INVALID_ARGUMENT,
LzoInvalidAlignment = LZO_E_INVALID_ALIGNMENT,
LzoOutputNotConsumed = LZO_E_OUTPUT_NOT_CONSUMED,
LzoInternalError = LZO_E_INTERNAL_ERROR,
}

那么这将放置在 src/lib.rs

pub enum LzoError {
LzoOk = 0,
LzoError = (-1),
LzoOutOfMemory = (-2),
LzoNotCompressible = (-3),
LzoInputOverrun = (-4),
LzoOutputOverrun = (-5),
LzoLookbehindOverrun = (-6),
LzoEofNotFound = (-7),
LzoInputNotConsumed = (-8),
LzoNotYetImplemented = (-9),
LzoInvalidArgument = (-10),
LzoInvalidAlignment = (-11),
LzoOutputNotConsumed = (-12),
LzoInternalError = (-99),
}

即宏将被填充。

依赖关系

~2–10MB
~94K SLoC