Makefile

    # 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}})