Breaking the recipes into compile and link phases is the best bet. You could do something convoluted to enforce the link order, like have A's link phase explicitly wait on a flag file created at the end of B's build... But that wastes cycles and likely will have negative impacts on build performance.
Rearchitecting serial makefiles for parallel builds is a wonderful "learning opportunity" -- you get to learn how your stuff REALLY builds. You may also find yourself discovering previously unknown implicit dependencies in your builds... -------- Original Message -------- From: Help-make <help-make-bounces+cowanb22=us.ibm....@gnu.org> on behalf of Paul Smith <psm...@gnu.org> Date: Sat, October 15, 2022 11:03 AM -0400 To: shubham sharma <shubhamsharma4...@gmail.com>, help-make@gnu.org Subject: [EXTERNAL] Re: Compiling Link dependent targets in parallel On Fri, 2022-10-14 at 17:50 +0530, shubham sharma wrote: > Currently for link dependent targets, say if A depends on B, for A to > start compiling the compilation and linking of B has to be completed > first. But given that compilation of both the targets is independent > of each other, isn't there a way where A and B compile in parallel > and this wait happens only at Link Time. i.e > > -> A's compilation starts > -> B's compilation starts (in parallel) > -> if A finishes first it waits for B to finish(for linking), but if > B finishes first A doesn't have to wait Sorry but I don't understand the question. You say "for A to start compiling ... B has to be completed" but then you say "the compilation of both targets is independent". Both of those cannot be true. It seems you might be confusing compiling and linking, which are two different steps. If you create A by linking a bunch of object files plus B (say B is a shared library or whatever), and you create B by linking a bunch of object files, then of course you can (and make will) compile all the object files in parallel before linking B, then A. That's the whole point of parallel builds. Are you perhaps doing all the compiling and linking in a single rule? That cannot work well if you want to create a parallel environment. Perhaps if you provided an example of a makefile that does not do what you want we can help.