you need to read the man page of the gnu make, you will find the answers:
the MACRO = $(shell <command>) means the <command> will be executed and the output of that command will be taken as the value of the macro. see
here
in general a makefile does not execute commands but constructs an environment and builds the defined target (and its dependencies). Therefore the include "command" is used to include another file and process it as a part of the current make system. You can move it if you want, but the construction of that make/build environment based on the order of lines, so probably it won't work anywhere.
__________________________________
Happy with solution ... mark as
SOLVED
If someone helps you, or you approve of what's posted, click the "Add to Reputation" button, on the left of the post.