67 lines
1.3 KiB
Markdown
67 lines
1.3 KiB
Markdown
---
|
|
title: makefile
|
|
description:
|
|
published: true
|
|
date: 2023-04-28T02:38:18.678Z
|
|
tags:
|
|
editor: markdown
|
|
dateCreated: 2023-04-28T02:22:37.379Z
|
|
---
|
|
|
|
# Makefile
|
|
|
|
```
|
|
VARIABLE = VALUE
|
|
|
|
RULE: Dependency $(FUNCTION)
|
|
$(FUNCTION)
|
|
Task
|
|
|
|
|
|
|
|
|
|
VAR = value #normale value assignment
|
|
VAR := $(VAR).o #value assignment with expansion
|
|
VAR != uname #add output of command
|
|
VAR := $(sh uname) #alternative way to add output
|
|
VAR += -Wall -Werror -Wextra #Append to value
|
|
VAR ?= $(VAR) #only sets if not defined
|
|
|
|
Text functions
|
|
$(SRC:.c=.o) #Changes all suffixes from .c to .o
|
|
|
|
Filename functions
|
|
$(addprefix obj/,$(OBJ)) #Adds a directory to the filenames
|
|
|
|
conditional functions
|
|
if
|
|
ifeq
|
|
ifdef
|
|
else
|
|
or
|
|
and
|
|
endif
|
|
foreach
|
|
|
|
value function
|
|
$(value (VAR)) #print value without expanding
|
|
|
|
shell function
|
|
$(shell COMMAND) #insert output here
|
|
|
|
control functions
|
|
$(error Something went wrong) #Makefile will stop here
|
|
$(warning This is a warning) #Display a warning
|
|
$(info This is some info) #Display some info
|
|
|
|
$@ #is the rule name
|
|
$< #is the first dependancy
|
|
$^ #are all dependancies
|
|
$? #only dependencies that have changed
|
|
$| #If anything changed, rebuild everything
|
|
% #acts as a wildcard in the rule
|
|
|
|
|
|
.PHONY: all clean fclean re bonus #Doesn't create a file named after the target
|
|
```
|