Makefile 隐含规则,模式规则,常见变量

   隐含规则
复杂的Makefile一般会使用隐含规则内的变量来简化编译处理。
将隐含规则中使用的变量分成两种:一种是命令相关的,如“CC”;一种是参数相关的,如“CFLAGS”。这些变量都是大写表示。

  常用的命令变量有:
CC
C语言编译程序。默认命令是“cc”
CXX
C++语言编译程序。默认命令是“g++”
CPP
C程序的预处理器(输出是标准输出设备)。默认命令是“$(CC) –E”
RM
删除文件命令。默认命令是“rm –f”

  参数相关的变量:
CFLAGS
C语言编译器参数
CXXFLAGS
C++语言编译器参数
LDFLAGS
链接器参数。(如:“ld”)

  模式规则:
可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。
如:
%.o : %.c ; <command ......>; 指出了怎么从所有的[.c]文件生成相应的[.o]文件的规则。如果要生成的目标是"a.o b.o",那么"%c"就是"a.c b.c"。

  常见变量:
all
这个伪目标是所有目标的目标,其功能一般是编译所有的目标
clean
这个伪目标功能是删除所有被make创建的文件
install
这个伪目标功能是安装已编译好的程序,其实就是把目标执行文件拷贝到指定的目标中去
print
这个伪目标的功能是例出改变过的源文件

INCLUDE
指明头文件的路径
LIBS
常用于链接时配合LDFLAGS链接动态库,LIBS指明动态库名称,LDFLAGS指出动态库路径
SOURCE
指代项目中的源文件
OBJS
指代项目中的目标文件
TARGET
指代项目中的可执行文件

附上一个用到上述变量的例子,但不一定能用,自行修改!

 1 #################
 2 ## date:20180305
 3 ##################
 4
 5 # test SOURCE OBJECT TARGET
 6 SOURCE := main.c test.c
 7 OBJS := main.o test.o
 8 TARGET := main
 9
10
11 # test CC LDFLAGS LIBS INCLUDE
12 CC := gcc
13 LDFLAGS := -L/path/libtest.so
14 LIBS := -ltest
15 INCLUDE := -I/path/test.h
16
17
18 # test all
19 all:
20     $(CC) -O $(TARGET) $(SOURCE)
21
22
23 #test clean
24 clean:
25     rm -fr *.o

原文地址:https://www.cnblogs.com/chenzhefan/p/8511760.html

时间: 2024-08-07 17:05:19

Makefile 隐含规则,模式规则,常见变量的相关文章

从头开始写项目Makefile(八):模式规则

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节讲到目录创建成功,目标文件没有生产到对应目录下,这里我们先给目标文件加上对应目录,这样的话产生对应的目标文件会直接生成到对应目录.我们先给库文件目标和可执行文件目标加上路径,如下: lib : $(OBJDIR) $(LIBDIR)/$(SRC_LIB) bin : $(OBJDIR) $(BINDIR)/$(SRC_BIN) $(OBJDIR) : >[

makefile 隐含规则

 隐含规则 ---- 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件).本章讲述的就是一些在Makefile中的"隐含的",早先约定了的,不需要我们再写出来的规则. "隐含规则"也就是一种惯例,make会按照这种"惯例"心照不喧地来运行,那怕我们的Makefile中没有书写这样的规则.例如,把[.c]文件编译

Makefile:xxx:***混合的隐含和普通规则。停止

Makefile: *** 混合的隐含和普通规则. 停止. Makefile: *** mixed implicit and normal rules. Stop. 这个原因可能是Make工具对低版本内核的Makefile一些旧的规则兼容不好,我们只需要修改对应的Makefile. 如 一: 原始的:        / %/: prepare scripts FORCE                $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES

make内核提示:Makefile: *** 混合的隐含和普通规则。 停止。

编译内核时提示: Makefile:1610: *** 混合的隐含和普通规则. 停止. 主要是交叉编译器的语法兼容问题,修改Makefile即可: 找到445行: config %config: scripts_basic outputmakefile FORCE                $(Q)mkdir -p include/linux include/config                $(Q)$(MAKE) $(build)=scripts/kconfig [email p

makefile常用指令和常见变量。

引用文章A:http://blog.csdn.net/liang13664759/article/details/1771246 文章介绍:非常详细的文章,讲解上都是比较基础的知识. 本文可能会持续更新部分引用文章.但博文本身更新内容并不会太多.主要因为个人写作水平问题,并不适合讲解专业性质的知识,容易误人子弟. 文章中会记录一些比较常用的指令和函数,方便快速查找. 一,基本使用. makefile基本依赖规则:默认情况下,会找到第一个目标指令,然后检测其对应依赖,然后进行初步的索引和指令执行(

Linux makefile教程之书写规则三[转]

书写规则———— 规则包含两个部分,一个是依赖关系,一个是生成目标的方法.在 Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么.一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标.如果第一条规则中的目标有很多个,那么第一个目标会成为最终的目标.make所完成的也就是这个目标. 好了,还是让我们来看一看如何书写规则. 一.规则举例fo

设计模式---领域规则模式之解析器模式(Interpreter)

前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter 一:解释器模式Interpreter (一)概念 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户定义他们能够在系统中进行的操作.Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过解释器来解释语言中的句子.Interpreter模式

Makefile的引入及规则

ARM裸机1期加强版视频课程配套WiKi第9课第5节_Makefile的引入及规则. 文字不能完全替代视频,所以如果你看了这些文章不太懂,建议购买视频进一步学习. 视频购买地址:100ask.taobao.com. 使用keil, mdk, avr等工具编译程序时点点鼠标就可以,它的内部机制是什么?它怎么组织管理程序?怎么决定编译哪一个文件? 答:实际上keil等IDE开发工具管理程序的内部机制也是Makefile,在linux下开发裸板程序的时候,使用Makefile组织管理这些程序,本节讲解

旗正规则引擎规则编辑

看到有人问,旗正规则引擎定位就是规则逻辑实现简易,业务员也可以执行,可是试用的时候,突然发现还是有些凌乱,规则编辑感觉还是有点繁琐啊.那我说,方法还是没对路,接下来,我来给献上宝典. 规则包开发 通过"开始-->程序-->旗正商业规则定制平台->规则配置器"启动规则配置器.启动后, 关闭欢迎首页, 进入到缺省的开发工作空间. 通过规则配置器的测试步骤包括创建工程.创建规则包.定义对象库.定义规则.发布规则包.测试规则包.创建web页面.web方式测试规则包 以下分别讲