Crystal clear. Another layer of indirection eh? I'll see if I can work with that... Thanks for the explanation.
On Wed, Jul 23, 2014 at 3:14 PM, Brad King <brad.k...@kitware.com> wrote: > On 07/23/2014 09:07 AM, Nick Overdijk wrote: > > Oh wait, since a is in the interface of b, b will always be > > accompanied by a, even though it's not a dependency. > > Is that how it works? > > Yes. If B is a static library then it does not really link so > its dependencies are only ever used transitively when something > else links to B. If B really links as a shared library though > then see the following. > > If target B links to target A then CMake will not compile objects > in B until A is done. As explained in my previous link this is > because we allow A to contain custom commands that generate > headers used by B. The VS and Xcode IDE build systems offer only > this granularity since they organize compilation and linking rules > of a single target together. The Makefile generator was designed > this way too. Only the Ninja generator has a chance of increasing > parallelism if the extra ordering dependencies were dropped. We've > thought about how to do extra analysis to determine when there is > no such custom command to drop them but have not implemented anything > yet. > > You might be able to use OBJECT libraries to increase parallelism > for all generators and with no changes to CMake: > > set(CMAKE_POSITION_INDEPENDENT_CODE ON) > add_library(Aobjs OBJECT a1.c a2.c) > add_library(Bobjs OBJECT b1.c b2.c) > add_library(Cobjs OBJECT c1.c c2.c) > set(dummy_c dummy.c) # needed for VS 6 and Xcode > add_library(A SHARED $<TARGET_OBJECTS:Aobjs> ${dummy_c}) > add_library(B SHARED $<TARGET_OBJECTS:Bobjs> ${dummy_c}) > add_library(C SHARED $<TARGET_OBJECTS:Cobjs> ${dummy_c}) > target_link_libraries(B PUBLIC A) > target_link_libraries(C PUBLIC B) > > This way the object compilations will be completely independent > of one another and of the linking and ordering dependencies. > > -Brad > >
-- 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-developers