The use of
$(eval ...) leads to very confusing execution paths, due to the way
make evaluates a target. When
make executes a target, it preprocesses all
$(....) interpolations and renders the template. After that, it executes, line-by-line each command in the target.
This is a companion discussion topic for the original entry at https://docs.cloudposse.com/tools/make/best-practices/