目前,当我调用 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 制作手册也会派上用场的。