#1718·cxx

cxx-build: `target/cxxbridge` out of sync when build cache is reused

Author: Chaoses-IbCreated Jun 7, 2026Updated Jun 7, 2026

For example, if feature a will change FFI, with this build.rs:

rust
fn main() {
    _ = cxx_build::bridge("src/lib.rs");

    println!("cargo:rerun-if-changed=src/lib.rs");
    println!("cargo:rerun-if-env-changed=CARGO_FEATURE_A");
}

The first cargo build and cargo build --features a will both produce correct files under target/cxxbridge. But if we run cargo build again, Cargo will reuse the build cache directly without rerunning build.rs, causing target/cxxbridge to stay on the --features a version.

A workaround I can think of is adding println!("cargo:rerun-if-changed=target/cxxbridge"). But because cxx-build will create new symlinks every time, it will cause build.rs to always rerun. Making cxx-build copy timestamps from the link source, or don't touch files if they don't change seems can fix this. I'm not sure if there is a clearer solution.

Tested cxx-build version: 1.0.194, 1.0.121