Makefile变量
Makefile 变量分为:用户自定义变量、预定义变量、自动变量、环境变量。
预定义变量包含一些常见编译器、汇编器的名称及编译选项。常见预定义变量如下:
AR:库文件维护程序的名称,默认为ar
AS:汇编程序的名称,默认为as
CC:C编译器的名称,默认为gcc
CPP:C预处理器的名称,默认为gcc -E
CXX:C++编译器的名称,默认为g++
FC:Fortran编译器的名称,默认为f77
RM:文件删除命令的名称,默认为rm -f
ARFLAGS:库文件选项,无默认值
ASFLAGS:汇编程序选项,无默认值
CFLAGS:C编译器选项,无默认值
CPPFLAGS:C预处理器选项,无默认值
CXXFLAGS:C++编译器选项,无默认值
FFLAGS:Fortran编译器选项,无默认值
在上一篇博客中Makefile如下:
OBJ = world
OBJS = world.o robot.o human.o animal.o
$(OBJ): $(OBJS)
gcc$(OBJS) -o $(OBJ)
animal.o: animal.c
gccanimal.c -c -o animal.o
human.o: human.c
gcchuman.c -c -o human.o
robot.o: robot.c
gccrobot.c -c -o robot.o
world.o: world.c
gccworld.c -c -o world.o
clean:
rm$(OBJ) $(OBJS)
我们写的程序,目前是在gcc环境编译,如果想变为g++环境编译,需要把Makefile中的gcc全部改为g++,如果程序的编译选项增加 -g,则需要在所有的 -c -o 前加 -g。这时就可以利用预定义变量定义gcc 与 -c -o,修改后的Makefile如下:
OBJ =world
OBJS = world.o robot.o human.o animal.o
CC = gcc
CFLAGS = -c -o
$(OBJ): $(OBJS)
$(CC)$(OBJS) -o $(OBJ)
animal.o: animal.c
$(CC)animal.c $(CFLAGS) animal.o
human.o: human.c
$(CC)human.c $(CFLAGS) human.o
robot.o: robot.c
$(CC)robot.c $(CFLAGS) robot.o
world.o: world.c
$(CC)world.c $(CFLAGS) world.o
clean:
rm$(OBJ) $(OBJS)
这样,我们的程序无论改变编译器还是改变编译选项都非常方便。