gcc-rs

Build Status Build status

Documentation

A simple library meant to be used as a build dependency with Cargo packages in order to build a set of C files into a static archive.

```rust,no_run extern crate gcc;

fn main() { gcc::compile_library("libfoo.a", &["foo.c", "bar.c"]); } ```

External configuration via environment variables

To control the programs and flags used for building, the builder can set a number of different environment variables.

Each of these variables can also be supplied with certain prefixes and suffixes, in the following prioritized order:

  1. <var>_<target> - for example, CC_x86_64-unknown-linux-gnu
  2. <var>_<target_with_underscores> - for example, CC_x86_64_unknown_linux_gnu
  3. <build-kind>_<var> - for example, HOST_CC or TARGET_CFLAGS
  4. <var> - a plain CC, AR as above.

If none of these varaibles exist, gcc-rs uses built-in defaults

In addition to the the above optional environment variables, gcc-rs has some functions with hard requirements on some variables supplied by cargo's build-script driver that it has the TARGET, OUT_DIR, OPT_LEVEL, and HOST variables.

Compile-time Requirements

To work properly this crate needs access to a C compiler when the build script is being run. This crate does not ship a C compiler with it. The compiler required varies per platform, but there are three broad categories:

C++ support

gcc-rs supports C++ libraries compilation by using the cpp method on Config:

```rust,no_run extern crate gcc;

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

When using C++ library compilation switch, the CXX and CXXFLAGS env variables are used instead of CC and CFLAGS and the C++ standard library is linked to the crate target.

License

gcc-rs is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.

See LICENSE-APACHE, and LICENSE-MIT for details.