たった一つとか嘘です。 ググッても中々出てこなくて、ちょっといじってたらできちゃったので書き残しておきます。 GNU makeでは1行毎に1つのシェルで実行されるので、 foo:: if true ; then echo "make love" ; fi は foo:: $(SHELL) -c 'if true ; then echo "make love" ; fi' と同じような挙動になります。 よってシェルスクリプトが複数行に渡る場合、 foo:: if true then echo "make love" fi なんて書いてしまうと、 foo:: $(SHELL) -c 'if true' $(SHELL) -c 'then' $(SHELL) -c ' echo "make love"' $(SHELL) -c 'fi' という感じで実行されることになるので当然エラーになります。