If I add 2 external projects (A and B), with B DEPENDS=A, and
STEP_TARGETS=update, I expect to be able to update B without updating,
building and installing A, since just updating the code is obviously
not
dependent.
I tried to look at ExternalProject.cmake, and the code seems to handle
this exactly as I expect, setting the dependency only for the
configure
command.
...
Any idea about the reason why this happens and how to fix this?
The target level dependency expressed by B DEPENDS=A, in the context of
CMake's ExternalProject, means that all steps of A must run before any
step of B is run. When you add step-targets to B, each step-target also
depends on A at a target level, which means that all steps of A will
run before any of the steps of B, even if you only request to build a
single step of B.
This is by design, and should NOT be "fixed"... :-)
I will frequently separate an ExternalProject into 2, one for
downloading (and/or patching/updating), and then another that depends
on that one for configure/build/install. That way, with many such pairs
of ExternalProject, all the downloading/patching/updating of everything
may happen in parallel, and then the real activity takes place after
that. Additionally, all the download/patch/update projects have no
dependencies, and updating just one will not cause anything else to
happen.
So, although I wouldn't recommend changing ExternalProject for this,
you could fairly easily change your use of it to something like this
set of projects:
download-A
download-B
A DEPENDS download-A
B DEPENDS download-B A
If you did it like that, adding step targets to the download projects
would not affect anything else.
HTH,
David
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers