I don’t pretend to fully understand what’s going on behind the scenes, but here’s a workaround that works for me:
# Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs.
# Workaround: On first run (in which cache variables are always accessable), set an intermediary environment variable.
if (FOO)
# Environment variables are always preserved.
set(ENV{_FOO} "${FOO}")
else ()
set(FOO "$ENV{_FOO}")
endif ()
Behind the scene: the problem appears when cmake tries to determine compiler or compiler options, and in this case it uses toolchain file without cache variables reading.
参考:
Check CMake Cache Variable in Toolchain File
https://stackoverflow.com/questions/28613394/check-cmake-cache-variable-in-toolchain-file