Makefile的创建和使用

Makefile基本结构

Makefile格式

target : dependency_files
		<TAB> command
eg:
test.o:test.c test.h
	gcc -c hello.c -o hello.o

Make使用

首先新建一个以Makefile为名称的文件(首字母大小写皆可)
输入代码后
直接运行make
或者加选项运行

-f:指定“makefile”文件;
-i:忽略命令执行返回的出错信息;
-s:沉默模式,在执行之前不输出相应的命令行信息;
-r:禁止使用build-in规则;
-n:非执行模式,输出所有执行命令,但并不执行;
-t:更新目标文件;
-q:make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息;
-p:输出所有宏定义和目标文件描述;
-d:Debug模式,输出有关文件和检测时间的详细信息。
-C dir:在读取 makefile 之前改变到指定的目录dir;
-I dir:当包含其他 makefile文件时,利用该选项指定搜索目录;
-h:help文挡,显示所有的make选项;
-w:在处理 makefile 之前和之后,都显示工作目录。

创建和使用变量

预定义变量

——	AR	库文件维护程序的名称,默认值为ar。
——	AS	汇编程序的名称,默认为as。
——	CC	C编译器的名称,默认值为cc。
——	CPP C预编译器的名称,默认值为$(CC) -E。
——	CXX	C++编译器的名称,默认值为g++。
——	FC	FORTRAN编译器的名称,默认值为f777。
——	RM	文件删除程序的名称,默认值为rm -f。
——	CFLAGS 		表示用于 C 编译器的选项。
——	CXXFLAGS 	表示用于 C++ 编译器的选项。

自动变量

——	$*	不包含扩展名的目标文件名称。
——	$+	所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
——	$<	第一个依赖文件的名称。
——	$?	所有时间戳比目标文件晚的依赖文件,并以空格分开。
——	$@	目标文件的完整名称。
——	$^	所有不重复的目标依赖文件,以空格分开
——	$%	如果目标是归档成员,则该变量表示目标的归档成员名称。

举个栗子

隐式和显示书写例子可参考这篇数据结构-线性表(顺式实现 增 删 改 查)文章中的Makefile书写。