Мне нужно вызвать make следующим образом:
bin ?= bar
all: ${bin}
objects := 1.o 2.o
$(objects): %.o: ./%.cpp
▸ g++ -c $< -o $@
foo: FORCE
▸ bin=foo\
▸ ▸ $(MAKE)·
${bin}: ${objects}
▸ g++ ${objects} -o ${bin}
FORCE:
т.е. целью по умолчанию является bar, но вызов foo target выполняется снова с переменной bin = foo. Проблема в том, что когда целевой foo переопределяется (во время второго вызова make), он всегда запускается (связывание) Этого можно избежать, если я использую другое имя цели:
foo_bla_bla: FORCE
▸ bin=foo\
▸ ▸ $(MAKE)
, в этом случае файл foo будет связан только тогда, когда объектные файлы изменились (правильно, что мне нужно). Но мне нужно использовать одно и то же имя для этой цели, чтобы вызвать make foo
и получить таким образом foo bin. Так почему переопределение цели foo влечет за собой принудительное связывание?