Earlier version, such as CMake 2.8.11.2 in particular, have incomplete or faulty support of target_include_directories generator expressions. Moreover, this allows us to assume that the command target_include_directories is available.
The gflags_TARGET variable contains the name of the originally exported import target. The "gflags" import target contains a copy of the relevant properties of this import target created by CMake. The gflags_LIBRARIES variable can be used to be consistent with other packages, but is otherwise no longer needed. In most cases, "target_link_libraries(foo gflags)" should be used.
This avoids having patched CMake modules in the source tree of the gflags library. Usually a C compiler is installed along a C++ compiler (or it is used for C as well). The only slight downside is the extra configuration time needed by CMake to check the C compiler.
These CMake variables are now set to a default which both maintains binary backwards compatibility with previous versions of the library, but at the same time allows already the use of the new "gflags" namespace instead of "google". Users may still override the default using the -D option of cmake, for example, when they use the library directly as submodule in their own project and prefer a different namespace/installation directory.
This ensures binary compatibility with previous 2.x release versions while allowing users to refer to the gflags library symbols using the preferred "gflags" namespace identifier.
The first element in the GFLAGS_NAMESPACE list is used as primary/default namespace. The symbols are then imported from this primary namespace into each of the other alternative namespaces with the using keyword. This is in particular used to maintain backwards compatibility with previous gflags library versions that used the "google" namespace instead of the new default "gflags" namespace.