makefile基本语法
新建makefile
touch makefile
赋值
:=
立刻赋值
makefile中应使用“#”作为注释,但不知为何此处可以用”//"
=
延迟赋值,其值为makefile中最后被指定的值
?=
若变量未被赋值,为其赋值,若已赋值,使用原值
//已经给var1赋值的情况
//未给var1赋值的情况
+=
追加赋值,在已经定义的字符串里添加新的字符串,不过中间会补空格
换行符 \
若赋值很长,也可使用换行符“\”, 如下图
自动化变量
$@: 表示所有目标
$<:表示
$:表示所有依赖
例:将helloworld.c分成三个程序
1、main.c
#include<stdio.h>
#include "hello.h"
int main(void){
hello();
return 0;
}
可使用“cat"查看文件中代码
2、hello.c
注意这里是hello函数
#include<stdio.h>
#include "hello.h"
void hello(void){
printf("Hello World\n");
}
3、hello.h
#ifndef _HELLO_
#define _HELLO_
void hello(void);
#endif
普通makefile
此时makefile如下
hello:hello.o main.o
gcc hello.o main.o -o hello
hello.o:hello.c
gcc -c hello.c -o hello.o
main.o:main.c
gcc -c main.c -o main.o
clean:
rm -rf *.o hello
编译结果:
使用此makefile虽然也可成功编译,但编译文件很多时,会非常复杂,可以使用自动化变量解决此问题
用变量表示依赖文件
后续增加依赖文件时,可直接在变量var后增加
使用通配符%和自动化变量$@ $<替代依赖和目标
var:=hello.o main.o
hello:$(var)
gcc $(var) -o hello
%.o:%.c
gcc -c $< -o $@
main.o:main.c
gcc -c main.c -o main.o
clean:
rm -rf *.o hello
%会自动匹配hello.o hello.c
$<依赖
$@目标
编译结果:
使用自动化变量$^ 表示所有依赖
var:=hello.o main.o
hello:$(var)
gcc $^ -o hello
echo $^
%.o:%.c
gcc -c $< -o $@
main.o:main.c
gcc -c main.c -o main.o
clean:
rm -rf *.o hello
编译结果:
是不是一下就简略很多呢
//春草已经破土,等繁花开满校园,可我仍不能去见那劳动湖上的黑嘴鸥,龙沙公园的松鼠,夜市的烤苕皮、梅菜扣肉、烤猪蹄…喜家德虾仁水饺,各家的烤肉火锅阿巴阿巴