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

Reply via email to