一、首先是make命令:
make是一个命令,当用户输入make命令,系统会自动寻找makefile、Makefile、GNUmakefile等其中的任何一个,根据该文件中的指令编译工程。
makefile是一个编译指令的脚本,记录了一条条编译方式;可以简化编译程序的时候输入的命令,编译的时候只需要输入make命令;可以节省编译时间,提高编译效率。
二、makefile的语法规则
大体框架
目标:依赖文件列表
<Tab>命令列表
目标文件依赖“依赖文件列表”,而命令列表是具体将“依赖文件列表”生成“目标文件”的具体指令。
用户在终端上输入make指令,自动寻找makefile,只会执行makefile中第一条“目标:依赖文件列表”
main:main.c fun.c
gcc main.c fun.c -o main
make命令格式
make -f 用户指定的文件名
make 后跟其他目标,这样可以执行其他目标
三、makefile实例
main:main.o fun.o
gcc main.o fun.o -o main
main.o:main.c
gcc -c main.c -o main.o
fun.o:fun.c
gcc -c fun.c -o fun.o
clean:
rm main *.o
四、makefile中的变量
1、自定义变量:用户自己定义的变量
makefile的变量名:makefile的变量名可以以数字开头
注意:
a、变量是大小写敏感的;
b、变量一般都在makefile的头部定义;
c、变量几乎可在makefile的任何地方使用。
变量名=变量值
如果需要读取变量的值,必须给“钱”,而且还是"美元".num=10 $num才是取变量的值
2、系统环境变量
make工具会拷贝
系统的环境变量并将其设置为 makefile 的变量,在 makefile 中可直接读取或修改拷贝后的变量。
#export test=10 export导出环境变量
#make clean
#echo $test
3、预定义变量(makefile定义好的变量)
$@ 目标名
$< 依赖文件列表中的第一个文件
$^ 依赖文件列表中除去重复文件的部分
AR 归档维护程序的程序名,默认值为 ar
ARFLAGS 归档维护程序的选项
AS 汇编程序的名称,默认值为 as
ASFLAGS 汇编程序的选项
CC C 编译器的名称,默认值为 cc
CFLAGS C 编译器的选项
CPP C 预编译器的名称,默认值为$(CC) -E
CPPFLAGS C 预编译的选项
CXX C++编译器的名称,默认值为 g++
CXXFLAGS C++编译器的选项
高级的makefile,下面是对上述makefile文件的简化:
CC=gcc
EXEC=main
OBJ=main.o fun.o
$(EXEC):$(OBJ)
$(CC) $^ -o $@
%.o:%.c
$(CC) -c $< -o $@
clean:
rm $(EXEC) $(OBJ)
五、最重要的一点
如果makefile文件的内容是从别处复制,编译运行时报错,可尝试将缩进处前方删除后重新<Tab>尝试,因为有的地方缩进方式是空格,不合语法规则。
博主还在学习中,若有不对请及时指出,谢谢!