[CMake] Getting a list of all targets?

Clifford Yapp cliffyapp at gmail.com
Sun Sep 5 18:51:55 EDT 2010


Is there any way within a CMakeLists.txt file to get a list of all the
currently defined targets?  I'm interested in this for two primary
reasons, and if anyone can point me to other solutions for these that
would be great, but I'm sort of stumped.

1)  I have a timestamp rule that prints out the time at the start of
the build.  Ideally, I'd like this target to depend on every other
target in the project, so it is always run at the beginning of the
project, but manually specifying dependencies for something like that
is an un-maintainable nightmare.  I'd vastly prefer to (as the last
step in the CMakeLists.txt file) iterate over all targets and make
each of them depend on the timestamp rule.  Unfortunately, so far I
can't figure out how to do this.

2)  I've been asked to implement a clean rule that removes JUST the
final product of a target (exe file, lib, etc) and not the individual
compiled files that are finally linked to form the product.  If there
is a feature like this in CMake I haven't found it yet, and the only
way I can think to do this globally (as opposed to adding extra logic
to every single target manually or via wrapper macro) is again to
iterate over a target list, (hopefully) read the product info from the
target properties, and generate a rule based on that.  Does anyone
know of a solution to this sort of custom clean behavior?

Cheers, and thanks!
CY


More information about the CMake mailing list