m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/makefile.md
diff options
context:
space:
mode:
Diffstat (limited to 'makefile.md')
-rw-r--r--makefile.md47
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
+