So, in the example above of a tool HelloWorld with a Subdirectory subproject, the build flow to build the tool is as follows:
Step 0. Execute before-HelloWorld-all:: if it exists Step 1. Build Subdirectory Step 2. Build HelloWorld Step 3. Execute after-HelloWorld-all:: if it exists
if you had more than one subproject, they would be built in the specified order. Most likely, they are independent though, and should be built in parallel. You can very simply obtain that result by getting rid of subprojects altogether and listing all files in the tool's GNUmakefile. This will also get rid of the intermediate linking steps for subprojects, speeding up your build even more.