# comment include Makefile.in -include Makefile.doesntexist .PHONY: all all: target foo = bar $(var) \ $(baz) quux ifeq ($(CC),gcc) bla=$(call func,param1,param2) else ifeq "x" "y" $(error this seems wrong) else libs=$(normal_libs) endif target1: error target2: bla.cpp $@ $(CC) bla.c -o bla.o $(CC) bla.o $< \ -o bla.exe @echo "hello" \ bla bla echo "hello" \ bla bla target3: ; @echo ’hello \ world’ ; echo "hello \ world" @echo "hello" target4: ; echo ’hello \ world’ ; echo "hello \ world" echo "hello" target5 \ target6 \ target7 &:: @echo "hello" # this should not break the rule # ifndef is a command ifndef # String Substitution VAR := $(ANOTHER_VAR:%=%+1) # Variable Assignment RELAXED ::= mello rempl := x foo := a b c bar := foo hello := $($(bar):a=$(rempl)) my??var=value var??=value var?=value var? = value var :::= value var ::= value var += value var != value var = value\#nocomment var = value#comment var = value;value2 override var = a define var :::= bar endef override define var :::= bar endef undefine var override undefine var export foo bar export foo = bar unexport foo bar prog: private EXTRA_CFLAGS = -L/usr/local/lib prog: CFLAGS = -g prog: a.o b.o # Conditionals bar = foo = $(bar) ifdef bar frobozz = yes else ifdef foo frobozz = no endif error_type := 0 check: ifeq ($(error_type),0) else ifeq ($(error_type),1) else ifeq ($(error_type),2) else ifeq ($(error_type),3) endif $(info "'") $(info '"') $(info $(??)) $(eval $(call Variable_rule,target/compile_flags,$${CXX} $$(CXXFLAGS))) $(eval ${call Variable_rule,target/link_flags,$$(CXX) $$(LDFLAGS) $${LDLIBS}})