executable name, so (for example) no extra flags can be passed inside
this variable, and the builder must ensure that there aren't any
trailing spaces. This compiler must understand the `-c` flag. For
certain `TARGET`s, it also is assumed to know about other flags (most
common is `-fPIC`).
*`AR` - the `ar` (archiver) executable to use to build the static library.
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`
1.`<var>_<target_with_underscores>` - for example, `CC_x86_64_unknown_linux_gnu`
1.`<build-kind>_<var>` - for example, `HOST_CC` or `TARGET_CFLAGS`
1.`<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][cargo] that it has the `TARGET`, `OUT_DIR`, `OPT_LEVEL`, and `HOST` variables
`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.