make
geralmente usa variáveis para isso; em particular:
-
CC
especifica o compilador C para usar; -
CFLAGS
especifica os sinalizadores do compilador C para passar o compilador; -
LDLIBS
especifica as bibliotecas a serem adicionadas (embora, em geral, você realmente deva escrever umMakefile
que defina tudo que seu programa precisa para construir, o que geralmente inclui bibliotecas).
Então você correu
make CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror" LDLIBS="-lm" x
para obter
cc -ggdb3 -O0 -std=c99 -Wall -Werror x.c -lm -o x
e
make CC="clang" CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror" LDLIBS="-lm" x
para obter
clang -ggdb3 -O0 -std=c99 -Wall -Werror x.c -lm -o x
Você também pode definir as variáveis em seu ambiente (o que permite que os padrões sejam definidos em seus scripts de inicialização do shell):
export CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror"
make LDLIBS="-lm" x
Devido à ausência de Makefile
no seu caso, você provavelmente encontrará Como esse Makefile faz o programa C sem mesmo especificando um compilador? interessante! O manual do GNU Make também será útil.