Makefile cu parametru de compilator

Iata o solutie draguta pentru folosirea mai multor compilatoare.

Problema: Am un program pe care vreau sa-l compilez cu mai multe compilatoare, iar fiecare compilator are optiuni diferite. Nu vreau sa am mai multe target-uri gen build_sun, build_gcc etc, ci vreau sa am o singur target.

Solutia: Folosesc o variabila, s-o numim COMPILER, iar variabilele din build target depind de ea. Totul depinde de cum interpreteaza Makefile-ul variabilele:

CC =            ${CC_${COMPILER}}

Makefile se uita la variabila compiler, vede ca e sun, atunci CC ia valoarea lui ${CC_sun}

-- snip Makefile --

COMPILER =      sun

CC_gcc =        gcc
CC_gcc4=        gcc
CC_sun =        cc

LDFLAGS_gcc =   -O3 -fopenmp
LDFLAGS_gcc4=   -O3 -fopenmp
LDFLAGS_sun =   -xO3 -xopenmp -L/opt/sun/sunstudio12.1/rtlibs/amd64

CC =            ${CC_${COMPILER}}
LDFLAGS =       ${LDFLAGS_${COMPILER}}

build:
        ${CC} ${LDFLAGS} -o hello hello.c

run: build
        ./hello

clean:
        rm -Rf hello


-- snip Makefile --