CMake environment variable scope
Environment variables in CMake set outside of CMake before a CMake process is started have global scope in CMake. Setting environment variables in a CMake script don’t have visibility outside the current CMake process. That includes CMake ExternalProject, which will NOT see environment variables set(ENV{name}) in the parent CMake project. Also, build and test processes will NOT see environment variables set in the CMake script.
To make environment variables take effect in a CMake script or CMake configure, set the environment variable before running CMake, or on a Unix-like OS on the command line. For example, to tell CMake the HDF5 library location, set environment variable HDF5_ROOT before the first CMake configure command:
# Unix-like
HDF5_ROOT=~/mylib cmake -Bbuild
# Windows PowerShell
$env:HDF5_ROOT="~/mylib"
cmake -B build
Of course, one could also set the CMake variable at configure like:
cmake -Bbuild -DHDF5_ROOT=~/mylib
To make environment variables present during a CMake build, for example for an ExternalProject, do as above for the configure.
To control environment variables present for CTest tests, including for individual tests, set test properties.