http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52122
--- Comment #24 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-12 18:41:37 UTC --- Can you please try the following? echo > Makefile <<\EOF LN_S=cp -p ifeq (cp -p,$(LN_S)) LN_S_RECURSIVE=cp -pr else LN_S_RECURSIVE=$(LN_S) endif all: echo $(LN_S_RECURSIVE) EOF make; make LN_S='ln -s'; make LN_S='cp -p' sed 's/LN_S=cp -p/LN_S=ln -s/' Makefile make; make LN_S='ln -s'; make LN_S='cp -p' Works for me just fine. Perhaps you have buggy make?