Never thought about executing a makefile until I saw one in a tarball, which was executable. It was a mistake since there was no Shebang, but I decided to add one to try it out:
#!/usr/bin/make
That won’t work since make(1) says:
If no -f option is present, make will look for the makefiles GNUmakefile, makefile, and Makefile, in that order.
And Shebang is actually running the makefile as:
/usr/bin/make Makefile
That makes Makefile the target, the reason why make says:
make: Nothing to be done for `Makefile'.
If you run like ./Makefile all, it would work, although you would still see the message above, before all target is processed, since there are two targets Makefile and all.
To fix this, according to this answer, you need to use -f to specify the makefile:
#!/usr/bin/make -f
The actual command becomes:
/usr/bin/make -f Makefile
This runs the first target of Makefile as we expect.
I’m not sure if there really is a benefit to make makefiles executable, for me typing make seem to be faster than ./M<TAB>.
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.