1.13. Makefile with Variables

The approach in previous section (Makefile with more default convention) looks nice, but we can as well try to simplify the Makefile with some variables.

TARGETS=greeting_en greeting_fr greeting_es

all: $(TARGETS)

$(TARGETS):
	gcc main.c $@.c -Wall -o $@

clean:
	rm $(TARGETS)

run:
	$(foreach target,$(TARGETS), ./$(target);)

To compile that file with GCC, the command would be.

make all

When the above command completes successfully, the compilation output would be:

gcc main.c greeting_en.c -Wall -o greeting_en
gcc main.c greeting_fr.c -Wall -o greeting_fr
gcc main.c greeting_es.c -Wall -o greeting_es

To execute the binary generated from the source file, the command would be as shown below.

make run

If everything went fine, the output would be:

./greeting_en;  ./greeting_fr;  ./greeting_es;
Hello World!
Bonjour le monde!
Hola Mundo!