ENABLED = A B # Helper function unmet_requirements = $(filter-out $(ENABLED),$(REQUIRE)) %.exe : @echo Creating executable $@ @touch $@ run% : @$(if $(unmet_requirements),echo "Skipping $@ due to unmet requirements:" $(unmet_requirements),echo Running $@) runfoo1 : REQUIRE = A B runfoo1 : foo.exe runfoo2 : REQUIRE = A C runfoo2 : foo.exe runbar1 : REQUIRE = A runbar1 : bar.exe allrun : runfoo1 runfoo2 runbar1 .INTERMEDIATE: foo.exe bar.exe