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书写。