Crate conan2

source ·
Expand description

§conan2-rs

§Introduction

conan2-rs is a Cargo build script wrapper of the Conan C/C++ package manager (version 2.0 only).

It automatically pulls the C/C++ library linking flags from Conan dependencies and passes them to rustc.

§Adding C/C++ dependencies using Conan

The simplest way to add C/C++ dependencies to a Rust project using Conan is to add a plain conanfile.txt file as follows:

[requires]
libxml2/2.11.4
openssl/3.1.3
zlib/1.3

§Example usage

Add conan2 to the Cargo.toml build dependencies section:

[build-dependencies]
conan2 = "0.1"

Add the following lines to the project build.rs script to invoke conan install and pass the Conan dependency information to Cargo automatically:

use conan2::ConanInstall;

ConanInstall::new().run().parse().emit();

The most commonly used build_type Conan setting will be defined automatically depending on the current Cargo build profile: Debug or Release.

The Conan executable is assumed to be named conan unless the CONAN environment variable is set to override.

§Advanced usage

Using custom Conan profiles with names derived from the Cargo target information:

use conan2::ConanInstall;

let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
let target_arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap();
let conan_profile = format!("{}-{}", target_os, target_arch);

ConanInstall::new()
    .profile(&conan_profile)
    .build("missing")
    .run()
    .parse()
    .emit();

§Getting C/C++ include paths from Conan dependencies

To use the list of include paths, do the following after parsing the conan install output:

use conan2::ConanInstall;

let metadata = ConanInstall::new().run().parse();

for path in metadata.include_paths() {
    // Add "-I{path}" to CXXFLAGS or something.
}

metadata.emit();

Structs§