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

x:=/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 —–生成静态库文件命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值