一、make工程管理器
适当分割程序文件有利于大型程序开发与提高编写程序的效率。但文件分割越多就越难编译维护。
make工程管理器是一个自动编译管理器,这里的自动是指它能根据文件的时间戳自动发现更新过的文件而减少编译的工作量。
同时,它根据读入的makefile文件的内容进行大量的编译工作。
二、编写makefile文件
在一个makefile文件中通常包含如下内容:
1)需要由make工具创建的目标体,通常是目标文件或可执行文件。
2)要创建的目标所依赖的文件。
3)创建每个目标体时需要运行的命令。
三、案例
书写规则:
目标文件:依赖文件
(tab)产生目标文件的命令
例如:
CC=gcc
objects=hello.o
newtest: $(objects) helloworld.o
$(CC) $(objects) helloworld.o -o newtest
$(objects): hello.c helloworld.h
$(CC) hello.c -c
helloworld.o: helloworld.c
$(CC) helloworld.c -c
clean :
rm -f hello.o helloworld.o
注意:gcc前面的前面必须是一个tab
1.CC=gcc,objects=hello.o相当于设置变量。
之后调用变量的方式为$(变量名)
2.最后两行
clean:
(tab) rm -f hello hellworld.o
定义clean指令时执行的操作。调用方式:make clean
附:makefile中预定义变量表
$* 不包含扩展名的目标文件名称。
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< 第一个依赖文件的名称。
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
$@ 目标的完整名称。
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件。
$% 如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称
为 mytarget.so(image.o),则 $@ 为 mytarget.so,而 $% 为 image.o。
AR 归档维护程序的名称,默认值为 ar。
ARFLAGS 归档维护程序的选项。
AS 汇编程序的名称,默认值为 as。
ASFLAGS 汇编程序的选项。
CC C 编译器的名称,默认值为 cc。
CCFLAGS C 编译器的选项。
CPP C 预编译器的名称,默认值为 $(CC) -E。
CPPFLAGS C 预编译的选项。
CXX C++ 编译器的名称,默认值为 g++。
CXXFLAGS C++ 编译器的选项。
FC FORTRAN 编译器的名称,默认值为 f77。
FFLAGS FORTRAN 编译器的选项。