Makefile常见语法格式
1、
(1)变量赋值
如:
Var=XX XX可以为⽂件名路径、字符串等
(2)赋值符号 (⼀般是给变量赋字符串值)
= 基本赋值 makefile展开后最后被确定的值
:= 覆盖之前的值 取决于语句所在makefile中位置
= 变量没有被赋值过就赋予后⾯的值
+= 添加等号后⾯的值
makefile中
例:
x=/usr/local/
y=$(x)arm/xyz
x=~/myfile/
y的值为~/myfile/arm/xyz ⽽不是/usr/local/arm/xyz
makefile phonyx:=/usr/local/
y:=$(x)arm/xyz
x:=~/myfile/
y的值为/usr/local/arm/xyz ⽽不是~/myfile/arm/xyz
(3)关键字:Wildcard
指根⽬录下的所有类型⽂件
如:
SRC = $(wildcard *.c) 指根⽬录(当前makefile所在⽬录)下的所有.C⽂件
如果还有⼦⽬录,⽐如⼦⽬录为inc,则再增加⼀个wildcard函数,象这样:
SRC = $(wildcard .c) $(wildcard inc/.c)
也可以指定汇编源程序:
ASRC = $(wildcard *.S)
(4)系统定义变量:
变量名 含义
AR ⽤于⽣成静态库.a⽂档 默认”ar”
AS 汇编程序。默认”as”
CC C编译程序 默认”cc”
CXX C++编译程序 默认是”g++”
CPP C程序的预处理器。默认是”$(CC)-E”
RM 删除命令 默认是”rm -f”
ARFLAGS 执⾏AR命令的命令⾏参数 默认是”rv”
ASFLAGS 汇编器AS的命令⾏参数(明确指定”.s”或”.S”⽂件时)
CFLAGS 执⾏CC编译器的命令⾏参数(编译.c源⽂件的选项)
CXXFLAGS 执⾏g++编译器的命令⾏参数(编译.cc源⽂件选项)
2、⾃动化变量
(1)依赖关系:
$@: $^
⽬标:依赖
@依赖:
⽬标:< $^
$< –第⼀个依赖⽂件
$^所有依赖
$? 表⽰⽐⽬标还要新的依赖⽂件列表
其它⾃动化变量:
$% 代表其所在规则的静态库⽂件的⼀个成员名
+代表其所在规则的依赖列表与
^类似 但$+依赖列表中的⽂件可重复 $^不可重复
$* 在模式规则和静态模式规则中,代表茎 茎是⽬标模式”%”所代表的部分
3、伪⽬标语句
(1)为避免⽬标与⽂件名重名 命名⼀个伪⽬标:
make clean 中clean 标签最好这样写:
.PHONY :clean //声明⼀个伪⽬标
Clean:
rm edit$(objects)
(2)@:不打印(显⽰)后⾯的命令
@echo “hello world” 打印hello world
echo “hello world” 打印echo hello world
(3)Export 定义环境变量 (全局变量)
export <variable…> //变量传递变量到下⼀级Makefile中
unexport <variable…> //变量不会传递变量到下⼀级Makefile中
4、编译链接
我们⽤gcc编译程序时,可能会⽤到“-I”(⼤写i),“-L”(⼤写l),“-l”(⼩写l)等参数,例:
-I
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上⾯这句表⽰在编译hello.c时:
-I /home/hello/include表⽰将/home/hello/include⽬录作为第⼀个寻头⽂件的⽬录,寻的顺序是:/home/hello/include–
>/usr/include–>/usr/local/include
-L
-L /home/hello/lib表⽰将/home/hello/lib⽬录作为第⼀个寻库⽂件的⽬录,寻的顺序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
-l(⼩写)
-lworld表⽰在上⾯的lib的路径中寻libworld.so动态库⽂件(如果gcc编译选项中加⼊了“-static”表⽰寻libworld.a静态库⽂件)XXXXX.so 动态库⽂件
XXXX.a静态库⽂件
AR = ar rc —–⽣成静态库⽂件命令
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论