I remember seeing the suggestion in the CMake documentation to not use globs, and thought that was a rather strange suggestion.
It seems sensible to compile all the source files in your project as a default convention. If you had a source file that didn't need to be compiled, I'd expect it might get deleted, renamed, or moved elsewhere in the source tree so it wasn't mixed with the other source files.
Though that perhaps has an assumption about having a clean checkout. Things don't work quite as smoothly when switching between branches, particularly with work in progress. I've noticed with Git, modified files are kept in the working directory when switching to a branch that didn't originally contain that file.
In terms of CMake though, I think the problem was about not regenerating files (the makefile? what if the makefile also used globs?) when the main CMakeLists.txt file hasn't been updated. If you list files explicitly, then it needs to be updated when adding new source files. I kind of think that's a bit of a kludge though. I think the problem can be solved similarly to how lockfiles work.
If you use tools like rubygems, or npm, they have lockfiles. You specify a package list for dependencies and optionally required versions of those packages. When packages are downloaded, or during a manual update of dependencies, the tools write a new lockfile which includes a list of all packages, and the versions that were actually downloaded and configured. The lockfile is then committed to version control. Any downloads with the lockfile present, will use the versions specified in the lockfile. That means that even if you didn't specify exact versions in the main dependency file, you still get reproducibility from the lockfile. And it's way easier to both specify dependencies that way, and to upgrade them. You only need to fiddle with versions numbers to add restrictions if something breaks during a manual update. Otherwise the tools handle all the messy version number details for you.
For CMake, it could potentially create a lockfile equivalent that lists all the source files that were found during the shell glob operation. If the current folder tree doesn't match the lockfile, regenerate.
Anyway, that's my understanding of what's happening. Admittedly I don't know CMake all that well.
Arklon, in case I've missed something there, please elaborate.