| /| /
|/ |/iki                                 Map  About  |  Page  New  Edit  History

# Make (GNU Make)

This article is a stub.

```makefile
CC=gcc
CXX=g++
RM=rm -f
CPPFLAGS=-g -Wall -Wextra -Werror -I./lib/godot-cpp/include
LDFLAGS=-g
LDLIBS=

# SOURCES=tool.cc support.cc
# OBJS=$(subst .cc,.o,$(SOURCES))

SOURCES := $(wildcard src/*.cpp)
OBJS=$(patsubst src/%.cpp,obj/%.o,$(SOURCES))

all: $(OBJS)

$(OBJS): $(SOURCES)
    $(CXX) $(LDFLAGS) $< -o $@ $(LDLIBS)

clean:
	$(RM) $(OBJS)

# Outputs target name
echo $@

# Outputs all prerequisites newer than the target
echo $?

# Outputs all prerequisites
echo $^

# Outputs the first prerequisite
echo $<

# Simple assignment :=
# A simple assignment expression is evaluated only once, at the very first occurrence. For example, if CC :=${GCC} ${FLAGS} during the first encounter is evaluated to gcc -W then each time ${CC} occurs it will be replaced with gcc -W.

# Recursive assignment =
# A Recursive assignment expression is evaluated everytime the variable is encountered in the code. For example, a statement like CC = ${GCC} {FLAGS} will be evaluated only when an action like ${CC} file.c is executed. However, if the variable GCC is reassigned i.e GCC=c++ then the ${CC} will be converted to c++ -W after the reassignment.

# Conditional assignment ?=
# Conditional assignment assigns a value to a variable only if it does not have a value

# Appending +=
# Assume that CC = gcc then the appending operator is used like CC += -w
# then CC now has the value gcc -W

# WINLIBS :=  -L"/c/Windows/System32" \
# 			-l:ntdll.dll \
# 			-l:KERNEL32.DLL \
# 			-l:KERNELBASE.dll \
# 			-l:msvcrt.dll  \
# 			-l:advapi32.dll  \
# 			-l:sechost.dll  \
# 			-l:RPCRT4.dll  \
# 			-l:CRYPTBASE.DLL  \
# 			-l:bcryptPrimitives.dll

# -MM make makedeps
# -MT specify which file to generate depends for
# -MF output file
$(DEPFILES): .deps/%.d: src/%.cpp src/%.h
	g++ -MM -MT $(patsubst src/%.cpp,bin/%.o,$<) -MF $@ $(GODOT_CPP_INCLUDES) -Isrc $<

NODEPS := clean purge

ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
	-include $(DEPFILES)
endif
```

filename


________________________________________________________________________________

Alisa Lain (C) 2025-2026