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
每月 127,008 次下载
这个 crate 的受欢迎度已下降
120KB
2K SLoC
gcc-rs
注意:这个 crate 已被弃用,并重命名为
cc
。建议不要使用此 crate,而应使用cc
一个库,用于将 C/C++ 代码编译成 Rust 库/应用程序。
一个简单的库,旨在作为 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.c
和 bar.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
(归档程序)可执行文件构建静态库。
这些变量也可以使用某些前缀和后缀进行提供,以下为优先级顺序
<var>_<target>
- 例如,CC_x86_64-unknown-linux-gnu
<var>_<target_with_underscores>
- 例如,CC_x86_64_unknown_linux_gnu
<build-kind>_<var>
- 例如,HOST_CC
或TARGET_CFLAGS
<var>
- 纯CC
,AR
如上所述。
如果这些变量都不存在,gcc-rs将使用内置默认值
除了上述可选环境变量之外,gcc-rs
还有一些函数对cargo的构建脚本驱动程序提供的某些变量有硬性要求,它有TARGET
,OUT_DIR
,OPT_LEVEL
和HOST
变量。
可选功能
目前gcc-rs支持并行编译(类似于make -jN
),但此功能默认关闭。要启用gcc-rs并行编译C/C++,您可以更改依赖关系
[build-dependencies]
gcc = { version = "0.3", features = ["parallel"] }
默认情况下,gcc-rs将并行限制为$NUM_JOBS
,如果没有提供,则将其限制在机器上的CPU数量。如果您使用cargo,请使用-jN
选项的build
,test
和run
命令,因为$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
结尾)需要确保gcc
在PATH
中可用。我们推荐使用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++库编译开关时,使用CXX
和CXXFLAGS
环境变量代替CC
和CFLAGS
,并将C++标准库链接到crate目标。
许可证
gcc-rs
主要根据MIT许可协议和Apache许可证(版本2.0)的条款进行分发,部分内容受各种类似BSD的许可证的保护。
请参阅LICENSE-APACHE和LICENSE-MIT以获取详细信息。
依赖项
~0–280KB