Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434408
  • 博文数量: 71
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 1246
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-23 14:46
个人简介

linux --- 一切皆文件

文章分类

全部博文(71)

文章存档

2021年(1)

2019年(2)

2018年(4)

2017年(7)

2016年(11)

2015年(1)

2014年(2)

2013年(33)

2012年(10)

分类: LINUX

2016-02-06 23:14:36

Makefile中以#开头的视为注释。如需使用#,则需要转意"\#"。

make命令默认识别makefile和Makefile两个文件。makefile比Makefile优先级高。
推荐使用Makefile

如果makefile名字为非默认的两个,则可通过-f/--file这个参数来指定。
make -f t.mk   或者 make --file t.mk clean

makefile的隐式推导规则之一:
目录下有main.c文件
1:make main 来编译main.c生成名字为main的可执行文件
2:make main.o来编译main.c生成main.o的目标文件

通过include指示符将其后面跟随的文件加载到本makefile中,类似于C语言的#include
Makefile:
include /home/xx/include.mk                #include指示符需要顶格写
SRC-y += a.c
SRC-y += b.c
include /home/xx/prog.mk

当文件中只有遇到include指示符才去展开相应的文件
include等类似的命令被称为指示符。

注:以下优先级只适用于include后非绝对路径情况。
如果include后跟随的是绝对路径,文件有则有,没有则报错。

include查找文件的优先级:
1: 查找make命令通过-I/--include-dir参数传进的目录
2:/usr/gnu/include,/usr/local/include,/usr/include这三个目录

-include /home/xx/prog.mk
前面的"-"表示如果include出错不提示,继续执行make。直到出现必要的依赖缺失而报错。

MAKEFILES:
export MAKEFILES=/home/xx/proc-t/t.mk aa=ttt    #设置环境变量,用空格分开

Makefile:
$(warning $(aa))

make运行结果:ttt。

MAKEFILES要点:
1:MAKEFILS中添加的文件,会像include一样展开到当前makefile,但是这些文件中的目标不会作为终极目标
2:如果MAKEFILES中的文件不存在,则不会报错
3:MAKEFILES中的文件,在一开始就会都展开,而include则是在遇到include指示符的时候展开


如果需要某条规则,即使目标文件存在也要执行,可以使用以下方法:
main:main.c force
    gcc -o main main.c

force:;
main目标依赖force,而force使用的是空命令,force不会生成目标,
所以main的依赖force每次都不存在,所以每次都会重新执行。


通过define...endef定义一个命令报
define test
echo "ooo"
a = test
endef

对已定义的变量要修改其值,可通过override命令重写。

ifdef....endif,ifndef...endif,ifeq...endif,ifneq...endif,ifdef...else...endif等


阅读(1171) | 评论(0) | 转发(0) |
0

上一篇:Makefile学习(一)

下一篇:Makefile 规则(三)

给主人留下些什么吧!~~