使用 make 编译和构建

使用 make 编译和构建

目前,当我调用 make 时,我看到以下内容正在执行

cc x.c -o x

我想看到的是以下内容

cc -ggdb3 -O0 -std=c99 -Wall -Werror x.c -l<lib> -lm -o x

或者可能

clang -ggdb3 -O0 -std=c99 -Wall -Werror x.c -l<lib> -lm -o x

显然,我可以每次都输入该内容,但我更喜欢在使用 make 时最终使用带有这些参数的 cc 。

某处有 make 配置文件吗?

答案1

make通常为此使用变量;尤其:

  • CC指定要使用的 C 编译器;
  • CFLAGS指定 C 编译器标志以传递给编译器;
  • LDLIBS指定要添加的库(尽管一般来说,您应该真正编写一个Makefile定义程序的所有内容的库)需要构建,通常包括库)。

所以你会跑

make CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror" LDLIBS="-lm" x

要得到

cc -ggdb3 -O0 -std=c99 -Wall -Werror x.c -lm -o x

make CC="clang" CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror" LDLIBS="-lm" x

要得到

clang -ggdb3 -O0 -std=c99 -Wall -Werror x.c -lm -o x

您还可以在环境中设置变量(允许在 shell 启动脚本中设置默认值):

export CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror"
make LDLIBS="-lm" x

鉴于您的情况中缺少 a Makefile,您可能会发现这个 Makefile 是如何在不指定编译器的情况下生成 C 程序的?有趣的!这GNU 制作手册也会派上用场的。

相关内容