One may want to inspect a few variables before any call to
enable_language(C|CXX) or project(FOO LANGUAGES C CXX)
is done in a project's CMakeLists.txt
For example some VSI plugins for VisualStudio mandate certain
configuration names. Detecting the platform to set
CMAKE_CONFIGURATION_TYPES becomes a hard problem.
How one can retrieve these information before the C/CXX languages
are enabled or project() is called. Only at that time,
CMAKE_SYSTEM_NAME and CMAKE_SYSTEM_PROCESSOR are fully
determined. But CMAKE_CONFIGURATION_TYPES are kind of frozen
internally by CMake.
Come to the rescue TargetInspector. It allows one to inspect the variables values from a dummy project configured as closely as possible to the current project. The inspected values are imported back in the current scope, and evrything is done in parallel to the currently configured cmake project so its context is left untainted by a premature reading of the toolchain file or any language activation...
list(APPEND CMAKE_MODULE_PATH "${WHERE_TARGETINSPECTOR_IS_DIR}")
include(TargetInspect)
target_inspect(INSPECT_VARIABLE FOO BAR OUTPUT_VARNAME INSPECTED_FOO INSPECTED_BAR)
message("inspected FOO = ${INSPECTED_FOO}")
message("inspected BAR = ${INSPECTED_BAR}")
Read the top directory CMakeLists.txt for an example.
Copyright 2021 Edouard Gomez Licensed under the terms of the MIT License
Read the file LICENSE for the complete legal text