Skip to content

Rebuild after modifying environment variables that the C compiler reads #906

Description

@madsmtm

Cargo has the ability to specify that a build script depends on specific environment variables using cargo:rerun-if-env-changed=NAME, but no such mechanism exist for C compilers (that I know of).

This means that when you update an environment variable that your C compiler reads, you have to run cargo clean before the change takes effect. It would be nice if cc could prevent this by outputting a list of known variables that the C compiler it is about to invoke may read.

A list of the major ones I've found so far in Clang/LLVM (see also their limited docs about it):

  • SDKROOT on Apple targets
  • VCINSTALLDIR / VCToolsInstallDir on Windows
  • INCLUDE / CPATH / C_INCLUDE_PATH / C_PLUS_INCLUDE_PATH / OBJC_INCLUDE_PATH / OBJCPLUS_INCLUDE_PATH
  • MACOSX_DEPLOYMENT_TARGET / IPHONEOS_DEPLOYMENT_TARGET / TVOS_DEPLOYMENT_TARGET / WATCHOS_DEPLOYMENT_TARGET / XROS_DEPLOYMENT_TARGET on Apple targets

Note that some of these may need to be handled by rustc/cargo itself.

Clang/LLVM read a bunch more, but they're mostly for debugging, or for stuff like setting up the terminal width, so I don't think those are applicable.

Additionally, C compilers usually rely on a few fundamental ones like PATH, PWD and PATHEXT on Windows that I would honestly expect cargo to handle, though I get why it may be difficult to do right.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions