Why is the `panic` in the if branch that has a true condition not executed if no `else` branch is supplied in `build.rs`?

// build.rs
fn main(){
    if std::env::var("DOCS_RS").is_ok(){
        panic!("{}",std::env::var("DOCS_RS").is_ok());
    }/*else{
        panic!("aaa");
    }*/
}

In PowerShell, $env:DOCS_RS="1"; cargo build can be successfully compiled, which is not expected. However, if you uncomment the comment

  --- stderr

  thread 'main' panicked at build.rs:3:9:
  true
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

The expected error will be printed out. What's the reason here? It's confusing.

maybe the build script is not run at all. try add:

println!("cargo::rerun-if-env-changed=DOCS_RS");

However, if the else branch is supplied, the build.rs do work.

if you modified build.rs, cargo will automatically (rebuild and) re-run the build script. but if you only change the environment variable without changing the build script (or any ./src/* files), cargo build will not re-run the build script (unless it's a clean build).

Okay. I still found a confusion part. If I manually set $env:RUSTFLAGS="--cfg docsrs"; cargo doc --open, then I can still see the item in the generated documentation, where the item in the source code is written as:

// lib.rs

#[cfg(not(docsrs))]
pub fn add(x: i32, y: i32) -> i32 {
    x + y
}

However, if I used the build.rs, for example,

fn main(){
  println!("cargo:rustc-cfg=docsrs");
}

Then, the generated documentation won't include the add item? Shouldn't rustc-cfg equal RUSTFLAGS="--cfg docsrs"?

PS: If I want to manually set docsrs, I need to set RUSTDOCFLAGS="--cfg docsrs". Why does rustc-cfg in build.rs affect RUSTDOCFLAGS?

this, I don't really know, presumably cargo is hanlding the environment variables before invoking rustdoc.

I wonder does it behave differently between cargo doc and cargo rustdoc? I vaguely remember there's different hanlding for the flags between cargo build and cargo rustc, maybe it's similar for the case of documentation?

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.