Должно сработать шаблонное правило, когда не указаны команды для сборки: %: %.cpp # commands to execute (built-in): $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ <b>helloworld.cpp</b> #include <iostream> int main(int argc, char ** argv) { std::cout << "Hello, World!" << std::endl; return 0; } <b>Makefile</b> OUTPUTFILE=hello INSTALLDIR=bin .PHONY: all all: $(OUTPUTFILE) $(OUTPUTFILE): helloworld.cpp .PHONY: install install: mkdir -p bin cp -p hello bin/ .PHONY: clean clean: rm -f hello