On 07-Oct-14 22:34, Brad King wrote:
On 10/07/2014 12:14 PM, Ruslan Baratov via CMake wrote:
Yes, that's why second file always modified. So assume I have a script
that generates a lot of *.cpp files. I modify script so it only change
one file, one file modified - one file recompiled. So what I trying to
do is optimization that can be checked by rule: "if there is at least
one file from OUTPUT list that is newer then any file from DEPENDS list
- you don't need to rerun custom command".
So this optimization is not possible (?) custom command must modify all
the files from OUTPUT list?
Build systems will re-run a rule if any input is newer than any output.
Thanks! It's pretty clear and simple statement (but important one). What
do you think about having it in documentation?
One way to achieve what you want is to not list the .cpp files as outputs.
Instead just use some cpp-generated.stamp file as the output that you do
touch every time. The .cpp files will be generated as side-effects, and
the rule will re-run only when the input changes regardless of whether
the generated .cpp files change.
Nice trick, but there is one catch - if you remove generated file
(accidentially or on purpose) then nobody will rebuild it, since build
system do not know what target exactly (custom command to be precise)
responsible for it.
FYI, there is an open issue for Ninja support of this case:
http://www.cmake.org/Bug/view.php?id=14963
Good to know, thanks.
Ruslo
--
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://public.kitware.com/mailman/listinfo/cmake