diff options
Diffstat (limited to 'makefile.md')
-rw-r--r-- | makefile.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/makefile.md b/makefile.md new file mode 100644 index 0000000..50b5aae --- /dev/null +++ b/makefile.md @@ -0,0 +1,47 @@ +# Writing Makefiles + +## Pattern rules + +In prerequesite, use exactly one `%`. Can then be used in requirements. E.g. + + %.o: %.c + # compile .c file to .o + +Details: <https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html> + +## Automatic variables + +* `$@`: current target +* `$<`: first prerequisite +* `$^`: all prerequisites, separated by spaces +* `$*`: target without extension +* `$(@F)`: file-within-directory part of target path + +More: <https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html> + +## C-related flags + +* `CC`: C compiler +* `CFLAGS`: flags for `CC` +* `LDFLAGS`: flags for the linker + +## Text functions + +* `$(var:suffix=replacement)`, syntax sugar for + `$(patsubst %suffix, $replacement, $(var))` + +More: <https://www.gnu.org/software/make/manual/html_node/Text-Functions.html> + +## Filename functions + +<https://www.gnu.org/software/make/manual/html_node/File-Name-Functions.html> + +## Recipes + +* `@<command>`: don't print command ran +* `-<command>`: don't exit on command failure + +## Arguments + +* `-B, --always-make`: force to make all targets + |