Linux 3 系统编程
1.Makefile 介绍
多个点c文件难以用gcc编译 故此出现了项目管理器
自动化编译
sudo apt install make
2.Makefile 语法规则
(1).一条规则
目标:依赖文件列表
命令列表
test:test1 test2
echo "test"
test1:
echo "test1"
test2:
echo "test2"
(2).make 命令格式
make是一个命令工具,它解释Makefile 中的指令(应该说是规则)。
make [ -f file ] [ options ] [ targets ]
1.[ -f file ]:
make默认在工作目录中寻找名为GNUmakefile、makefile、Makefile的文件作为makefile输入文件
-f 可以指定以上名字以外的文件作为makefile输入文件
l
2.[ options ]
-v: 显示make工具的版本信息
-w: 在处理makefile之前和之后显示工作路径
-C dir:读取makefile之前改变工作路径至dir目录
-n:只打印要执行的命令但不执行
-s:执行但不显示执行的命令
3.[ targets ]:
若使用make命令时没有指定目标,则make工具默认会实现makefile文件内的第一个目标,然后退出
指定了make工具要实现的目标,目标可以是一个或多个(多个目标间用空格隔开)。
插入 make filesh例子
最简单的Makefile
test:test.c add.c sub.c mul.c div.c
gcc test.c add.c sub.c mul.c div.c -o test
第二个版本Makefile
test.o:test.c
gcc -c test.c
add.o:add.c
gcc -c add.c
sub.o:sub.c
gcc -c sub.c
mul.o:mul.c
gcc -c mul.c
div.o:div.c
gcc -c div.c
该方式可以避免重复编译
3.变量
//1.自定义变量
k=test.o add.o sub.o mul.o div.o
test: $(ak)
gcc $(ak) -o test
test.o::test.c
gcc -c test.c
add.o::add.c
gcc -c add.c
sub.o::sub.c
gcc -c sub.c
mul.o::mul.c
gcc -c mul.c
div.o::div.c
gcc -c div.c
~
///2.系统定义变量
除了使用用户自定义变量,makefile中也提供了一些变量(变量名大写)供用户直接使用,我们可以直接对其进行赋值。
CC = gcc #arm-linux-gcc
CPPFLAGS : C预处理的选项 如:-I
CFLAGS: C编译器的选项 -Wall -g -c
LDFLAGS : 链接器选项 -L -
//3.自动变量
$@: 表示规则中的目标
$<: 表示规则中的第一个条件
$^: 表示规则中的所有条件, 组成一个列表, 以空格隔开,如果这个列表中有重复的项则消除重复项。
注意:自动变量只能在规则的命令中中使用
ak=test.o add.o sub.o mul.o div.o
cc=gcc
te=test
$(te) : $(ak)
$(cc) $(ak) -o $(te)
test.o::test.c
$(cc) -c $< -o $@
add.o::add.c
$(cc) -c $< -o $@
sub.o::sub.c
$(cc) -c $< -o $@
mul.o::mul.c
$(cc) -c $< -o $@
div.o::div.c
$(cc) -c $< -o $@