[CMake] Dependency for launching an application

Andreas Haferburg ahaferburg at scopis.com
Mon Feb 11 05:22:22 EST 2013


My initial explanation was bad.

Both parent and child depend on a common library. If something in this lib changes, I need both of 
them to get rebuilt before executing parent.exe, since it will run child.exe.

Sorry for the confusion.

Andreas


On 08.02.2013 19:04, Nick Overdijk wrote:
 > I'm probably missing something, but why
 >
 >> add_dependencies(parent child)
 >
 > ? That doesn't make sense. Parent is not using anything from child. You can just leave that line 
away and everything will be fine right?
 >
 > On 2013-08-02, at 16:24:21 , Andreas Haferburg wrote:
 >
 >> Yes, that's pretty much the setup we have: The common (static) library contains almost all 
obj's, and the two exe projects only have a small main.obj and link against the library. I'd like to 
eliminate the build(=link) time of child.exe by having the linker link both exes at the same time.
 >>
 >> Regards,
 >> Andreas
 >>
 >>
 >> On 08.02.2013 15:41, Patrick Johnmeyer wrote:
 >>> On Fri, Feb 8, 2013 at 8:16 AM, Andreas Haferburg <ahaferburg at scopis.com
 >>> <mailto:ahaferburg at scopis.com>> wrote:
 >>>
 >>>     What happens is that common is built, then child, then parent, then parent is executed.
 >>>     What I'd like to happen is that common is built, then child+parent are being built 
concurrently,
 >>>     and as soon as both are done, parent is executed.
 >>>
 >>>
 >>> Unfortunately that's just not how dependencies work. If parent is dependent on child, then child
 >>> will build before parent in serial. And since they are both dependent on common, you essentially
 >>> have a linear dependency in your example.
 >>>
 >>> You could break this up by creating a new target that is dependent on child and parent, and
 >>> eliminate parent's direct dependency on child. This will allow child and parent to be built
 >>> simultaneously. You would then need to "do something" with this new target so that it will cause
 >>> "parent" to be run.
 >>>
 >>> You may be able to improve build times (assuming that is the driver) by invoking the compiler flag
 >>> for parallel compilation. Another option may be to convert the majority of child and parent to
 >>> another library, with small simple executable projects that invoke those libraries. This moves the
 >>> dependencies around in a way that you *may* get better build performance ... but everything I 
say is
 >>> speculative without knowing the nitty gritty of your project -- build times per project, full
 >>> dependency graph, etc.
 >> --
 >>
 >> 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://www.cmake.org/mailman/listinfo/cmake
 >


More information about the CMake mailing list