Alan W. Irwin wrote:
The GNU make documentation states the following:
Since it knows that phony targets do not name actual files that
could be remade from other files, make skips the implicit rule search
for phony targets.... This is why declaring a
target phony is good for [make] performance....
Also,
Using .PHONY' is more explicit and more efficient. However, other
versions of make' do not support .PHONY'; thus FORCE (an arbitrarily
named rule with no prerequisites or rules) appears in
many makefiles.
As part of another investigation I searched a Linux build tree created by
cmake (2.4.8) and was surprised to find no reference to .PHONY. Instead,
the makefile generator on Linux is using the same method as FORCE idea
above, i.e., a rule called cmake_force with no prerequisites or commands to
serve as a prerequisite to rules that must be run every time.
CMake is missing a bet on Linux systems to reduce Makefile overhead
since it
is using this cmake_force approach rather than the preferred more
efficient.PHONY approach for rules that must be run every time. Since the
Makefiles generated by cmake have an extremely large number of such rules,
Makefile latency may be significantly reduced by this method on Linux (GNU
make) systems.
If the cmake developers here like this idea (or at least don't strongly
dislike it), I will go ahead and make a feature request so it doesn't get
lost.
CMake is written to generic make, and I don't think we would want to add
something that only worked with gmake. The trouble is the make you are
using can change after CMake is run, so we can not even test for the
version of make being used. I guess if it was a big enough performance
gain, we could add some sort of option to allow for this. However, I
would want to make sure that there would be a good payback. So far the
cmake makefiles outperform the autotools ones quite well, and
performance has not been an issue. Do you think you are having a
performance problem?
-Bill
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake