#build-dependencies #cargo-build #build-script #cc #deprecated #compile #compiler

已弃用 构建 gcc

已弃用 的 crate,已重命名为 cc。Cargo 构建脚本构建时间依赖项,用于调用本地 C 编译器将本地 C 代码编译成静态库,以便链接到 Rust 代码

67 个版本

使用旧的 Rust 2015

0.3.55 2018 年 10 月 8 日
0.3.54 2017 年 9 月 12 日
0.3.53 2017 年 8 月 20 日
0.3.51 2017 年 6 月 13 日
0.1.0 2014 年 11 月 27 日

#48#build-dependencies

Download history 28146/week @ 2024-03-14 31593/week @ 2024-03-21 29651/week @ 2024-03-28 27420/week @ 2024-04-04 35614/week @ 2024-04-11 35197/week @ 2024-04-18 31904/week @ 2024-04-25 27182/week @ 2024-05-02 30203/week @ 2024-05-09 31451/week @ 2024-05-16 30862/week @ 2024-05-23 31169/week @ 2024-05-30 30597/week @ 2024-06-06 32853/week @ 2024-06-13 32251/week @ 2024-06-20 25973/week @ 2024-06-27

每月 127,008 次下载
这个 crate 的受欢迎度已下降

MIT/Apache

120KB
2K SLoC

gcc-rs

注意:这个 crate 已被弃用,并重命名为 cc。建议不要使用此 crate,而应使用 cc

一个库,用于将 C/C++ 代码编译成 Rust 库/应用程序。

Build Status Build status

文档

一个简单的库,旨在作为 Cargo 包的构建依赖项使用,以便将一组 C/C++ 文件构建成静态库。请注意,虽然这个 crate 被称为 "gcc",但它实际上调用平台最相关的编译器,例如在 MSVC 上使用 cl。也就是说,这个 crate 的确可以在 MSVC 上运行!

使用 gcc-rs

首先,您需要为您的 crate 添加一个构建脚本(build.rs),并且通过以下方式将此 crate 添加到您的 Cargo.toml

[package]
# ...
build = "build.rs"

[build-dependencies]
gcc = "0.3"

接下来,您将想要编写一个如下的构建脚本

// build.rs

extern crate gcc;

fn main() {
    gcc::Build::new()
        .file("foo.c")
        .file("bar.c")
        .compile("foo");
}

就这样!运行 cargo build 应该可以处理其余部分,并且您的 Rust 应用程序现在将具有编译成名为 libfoo.a 的文件的 C 文件 foo.cbar.c。您可以在 Rust 代码中通过以下方式声明函数来调用这些函数

extern {
    fn foo_function();
    fn bar_function();
}

pub fn call() {
    unsafe {
        foo_function();
        bar_function();
    }
}

fn main() {
    // ...
}

通过环境变量进行外部配置

为了控制用于构建的程序和标志,构建器可以设置多个不同的环境变量。

  • CFLAGS - 传递给 "gcc" 的一系列空格分隔的标志。请注意,单个标志目前不能包含空格,所以像 "-L=foo\ bar" 这样的操作是不可能的。
  • CC - 实际使用的C编译器。请注意,这作为确切的可执行文件名使用,因此(例如)不能在此变量内部传递额外的标志,并且构建者必须确保没有尾随空格。此编译器必须理解-c标志。对于某些TARGET,它还假定了解其他标志(最常见的是-fPIC)。
  • AR - 使用ar(归档程序)可执行文件构建静态库。

这些变量也可以使用某些前缀和后缀进行提供,以下为优先级顺序

  1. <var>_<target> - 例如,CC_x86_64-unknown-linux-gnu
  2. <var>_<target_with_underscores> - 例如,CC_x86_64_unknown_linux_gnu
  3. <build-kind>_<var> - 例如,HOST_CCTARGET_CFLAGS
  4. <var> - 纯CCAR如上所述。

如果这些变量都不存在,gcc-rs将使用内置默认值

除了上述可选环境变量之外,gcc-rs还有一些函数对cargo的构建脚本驱动程序提供的某些变量有硬性要求,它有TARGETOUT_DIROPT_LEVELHOST变量。

可选功能

目前gcc-rs支持并行编译(类似于make -jN),但此功能默认关闭。要启用gcc-rs并行编译C/C++,您可以更改依赖关系

[build-dependencies]
gcc = { version = "0.3", features = ["parallel"] }

默认情况下,gcc-rs将并行限制为$NUM_JOBS,如果没有提供,则将其限制在机器上的CPU数量。如果您使用cargo,请使用-jN选项的buildtestrun命令,因为$NUM_JOBS由cargo提供。

编译时要求

为了正常运行,此crate在运行构建脚本时需要访问C编译器。此crate不附带C编译器。所需的编译器因平台而异,但大致分为三类

  • Unix平台需要cc作为C编译器。例如,在Linux发行版上安装gcc/clang,以及在OSX上安装Xcode。
  • 针对MSVC的Windows平台(例如,您的目标三元组以-msvc结尾)需要确保cl.exe可用,并且位于PATH环境变量中。这通常可以在标准的Visual Studio安装中找到,并且可以通过运行相应的开发者工具外壳来设置PATH
  • 针对MinGW的Windows平台(例如,您的目标三元组以-gnu结尾)需要确保gccPATH中可用。我们推荐使用MinGW-w64发行版,它使用Win-builds安装系统。您也可以通过MSYS2获得它,详情请见此处。请确保安装与您的rustc安装相对应的正确架构。来自较老MinGW项目的GCC只能与32位rust编译器兼容。

C++支持

gcc-rs通过在Build中使用cpp方法支持C++库的编译。

extern crate gcc;

fn main() {
    gcc::Build::new()
        .cpp(true) // Switch to C++ library compilation.
        .file("foo.cpp")
        .compile("libfoo.a");
}

当使用C++库编译开关时,使用CXXCXXFLAGS环境变量代替CCCFLAGS,并将C++标准库链接到crate目标。

许可证

gcc-rs主要根据MIT许可协议和Apache许可证(版本2.0)的条款进行分发,部分内容受各种类似BSD的许可证的保护。

请参阅LICENSE-APACHE和LICENSE-MIT以获取详细信息。

依赖项

~0–280KB