makefile知识点总结

Makefile变量

$^         所有的依赖目标的集合,以空格分隔

[email protected]        表示规则中的目标文件集

$?          所有比目标新的依赖目标的集合,以空格分隔

$<         依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。

$(@D)   表示"[email protected]"的目录部分(不以斜杠作为结尾) ,如果"[email protected]"值是"dir/foo.o",那么"$(@D)"就是"dir",而如果"[email protected]"中没有包含斜杠的话,其值就是"."(当前目录)

$(@F)    表示"[email protected]"的文件部分,如果"[email protected]"值是"dir/foo.o",那么"$(@F)"就是"foo.o","$(@F)"相当于函数"$(notdir [email protected])"

Makefile赋值语句

=   是最基本的赋值
:=  是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

备注:makefile中“=”和“:=”的区别到底有什么区别

1、"="
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
    x = foo
    y = $(x) bar
    x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

2、":="

":="表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
    x := foo
    y := $(x) bar
    x := xyz
在上例中,y的值将会是foo bar,而不是xyz bar了。

原文地址:https://www.cnblogs.com/baiyou123/p/9862215.html

时间: 2024-08-29 21:17:14

makefile知识点总结的相关文章

Makefile 知识点

[email protected] [email protected] is the name of the target. $? The $? macro stores the list of dependents more recent than the target (i.e., those that have changed since the last time make was invoked for the given target). $^ $^ gives you all de

uboot学习之二----主Makefile学习之三----静默编译

第45-54行: 45 # Deal with colliding definitions from tcsh etc. 46 VENDOR= 47 48 ######################################################################### 49 # Allow for silent builds 50 ifeq (,$(findstring s,$(MAKEFLAGS))) //判断findstring函数是否为空 51 XECHO

要善于总结,实践,才有出路

1.之前对pjsip会话状态机,voip skeleton,Email Server和iptable,nginx等程序的总结不够,没有形成清晰的认识 2.对学过的shell,makefile知识点要写好总结,以免以后用到能够快速地学习 3.对学过的算法(快排,堆,合并,希尔,二叉树的遍历等)和数据结构(平衡二叉树,红黑树等), 要时时复习,多点写代码测试 4.之前做过的<深入理解操作系统>的几个lab,要不断地完善,学习 6.总结来自学习和实践,总结出来的精华用来指导实践和学习 7.简历要凝练

关于makefile中的知识点&lt;不断补充&gt;

=        make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将会是整个makefile中最后被指定的值.:=       表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值.?=      是如果没有被赋值过就赋予等号后面的值+=      是添加等号后面的值 [email protected]      目标文件 $^      所有的依赖文件 $<      第一个依赖文件.

Makefile 7——自动生成依赖关系 三颗星

后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上"objs/"前缀.gcc的-E选项,预处理.在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了.通过-E选项,可以避免生成依赖关系时gcc发出警告,以及提高依赖关系的生成效率. 现在,已经找到自动生成依赖关系的方法了,那么如何将其整合到我们complicated项目的Makefile中呢?自动生成

Contiki 2.7 Makefile 文件(二)

二.Makefile.include 1.第一部分 (1) ifndef CONTIKI ${error CONTIKI not defined! You must specify where Contiki resides} endif 含义: 如果没有定义CONTIKI变量,make停止运行. 并产生一个致命的错误信息,CONTIKI not  defined! You must specify where Contiki resides. hello-world这个例子在主控Makefil

Linux Kernel Makefile简析 之 make zImage

本文将简要分析Linux Kernel编译zImage的过程.读者需具备GNU Make.Bash Shell.Python脚 本.编译器.链接器等方面的基础知识.虽然重点是分析kernel的构建过程,但是也会顺带的分析一些 其他的小的知识点.我们坐车去远行,欣赏沿途的风景,并不会妨碍我们最终抵达我们的目的地,不是 吗? 先描述一下具体开发环境: . host os: ubuntu 14.04 server LTS . cross toolchain: crosstool-ng生成的交叉编译器

补基础之shell 和makefile

2.2.1.shell介绍 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说他是人机交互的一种方式 (2)我们可以使用shell和操作系统.uboot等软件系统进行交互.具体来说就是我们通过shell给软件系统输入命令,然后回车执行,执行完后会回到shell命令行再次输入命令执行 (3)我们上述的操作方式一般情况下工作很好,但是有一个缺陷.譬如我们要在linux 下创建一个文件a.c,可以touch a.c,但是如果我现在要在linux下创建100个文件,分别是a1.c  a

粗浅谈论makefile

主要参考:跟我一起写makefile  点击打开链接 Makefile简介: 简单的说,一个大的工程中的源文件不计其数,其按照不同的类型,功能,模块放在了不同的目录之中,makefile则是定义了一些规则来指定,哪些文件需要先编译,哪些需要后编译,哪些需要重新编译,而makefile带来的好处就是,一旦写好,之后一个make命令 就可以搞定,极大的提高了软件的开发. 简述编译链接: 无论选择什么语言c,c++都需要将源文件编译成为中间代码文件,在windows下面是.obj文件,而unix则是.