允许自由转载,但请尊重他人劳动成功,保留源地址。
作者:onebraveman
优快云:http://blog.youkuaiyun.com/idc_void
介绍:本文对Make文档中系统变量小节进行了翻译。
Make隐式规则的“处方”使用一些预定义的变量。你可以通过make
参数或者设置Shell环境变量修改makefile文件中变量的值,达到无需重定义变量而改变隐式规则工作的目的。通过使用—R
或者----no-builtin-variables
可选项,你可以取消所有隐式规则中的变量。
例如,编译C源码的“处方”常用到$(CC) -c $(CFLAGS) $(CPPFLAGS)
。这个变量的默认值是cc
,命令cc -c
无执行结果。通过重定义cc
为“ncc”,你可以让所有隐式C编译使用“ncc”。通过重定义“CFLAGS”为“-g”,你可以向每一次编译传递”-g”可选项。所有的隐式规则,如C编译器使用“
(CC)”来为编译器获取的的程序名,和包含‘
(CFLAGS)’的所有参数,都传递给编译器。
隐式规则使用的变量可分为两类:一类是程序名(例如CC);
另一类是包含程序参数的(如CFLAGS)。如果一个变量包含多个参数,用空格分隔。
下面表格描述最常用的预定义变量。这个列表不详尽,并且这里的默认值可能与在你环境中make选取的值不同。为了得到一份你运行环境下GNU详细的预定义列表,在没有Makefiles的目录运行make -p
(限于篇幅原因,只列出4个自己常用到的)。
CC
Program for compiling C programs; default ‘cc’.
CXX
Program for compiling C++ programs; default ‘g++’.
LDFLAGS
Extra flags to give to compilers when they are supposed to invoke the linker, ‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable instead.
LDLIBS
Library flags or names given to compilers when they are supposed to invoke the linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS variable.
Refer:
1. make系统变量