On 2014-02-12 11:35, Abe Bachrach wrote:
The Makefile that cmake generates includes a rule to automatically re-run
cmake if any of the input CMakelists.txt files change.

Currently, if you change the name of an executable target (or library), it
will leave the old file in the output location, and then after re-running
cmake, the Makefile will not have any record of it, so running make clean
won't remove it.

I would rather have the rule call make clean before re-running cmake so
that such stray outputs are not left around.

Is there any way to accomplish this?

What you really want is to record the "old" list of output files, re-run CMake, then remove any files on that list that no longer have rules to generate them. If you do a complete 'clean' you will delete and have to rebuild more than is necessary (which might even be nothing e.g. if CMake is being re-run because you added a debugging message).

While that's probably hard to impossible¹ with 'make', I mention it because this feature (as described above) has at least been discussed for ninja², which does have the ability to implement it. (I'm not sure if it actually has been implemented or not, though.)

(¹ Use of recursive makefiles here doesn't help; probably each makefile would have to implement this logic, and each parent would have to know how to deal with directories that no longer exist in the build.)
http://martine.github.io/ninja/)

--
Matthew

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to