使用make 3.79版本,测试内部数据库的时候。就是用 --print-data-base 发现下面的数据结构 # environment !D: = D:\msys\bin 这是什么意思?难道冒号也可以作为变量名称的一部分吗?
$@ 代表规则中的目标文件名。如果目标是一个文档(Linux中,一般称.a文件为文档),那么它代表这个文档的文件名。在多目标的模式规则中,它代表的是哪个触发规则被执行的目标文件名。 $% 规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的目标是“foo.a(bar.o)”,那么,“$%”的值就为“bar.o”,“$@”的值为“foo.a”。如果目标不是函数库文件,其值为空。 $ ...
我在一个关于dbus通信程序的makefile里面看到了这样的一行代码: [code] libosso -rpc -sync: libosso -rpc -sync.c $(CC) $( CFLAGS ) -DProgName =\" LibOSSOExample \" \ $< -o $@ $( LDFLAGS ) [/code] 关键是这个命令中的-DProgName 这里的ProgName是自己定义的名字还是makefile里面预定义的名字呢? 我在好多代码中都看到这个定义,到底它是什么作用呢?
下面是make的7个”核心“,自动变量: $@ 工作目标的文件名 $% 档案文件成员(archive member)结构中的文件名元素 $ 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87718/showart_1877619.html
makefile中的变量 在makefile中,变量就是一个名字(像是C语言中的宏),代表一个文本字符串(变量的值)。在makefile的目标、依赖、命令中引用一个变量的地方,变量会被它的值所取代(与C语言中宏引用的方式相同,因此其他版本的make也把变量称之为“宏”)。 当我们定义了一个变量之后,就可以在makefile的很多地方使用这个变量。变量的引用方式是:使用“$(VARIABLE_NAME)”或者“${ VARIABLE_NAME }”来引用一个变量的...
makefile变量就像环境变量,事实上环境变量在make过程中被解释成make的变量。这些变量是大小写敏感的,一般都定义成大写。它们可以在任何地方被引用,如: a) 存贮一个文件名列表 b) 存贮可执行文件名 c) 存贮编译器旗标,如果你想给你所有的编译命令传递一组相同的选项,可以把这组选项存入一个变量。 要设定一个变量,只有在一行开始的写下这个变量的名字,后面跟一个=,后面跟你要设定的这个变量的值。以后要引用,写一个$...
我在主目录下的makefile中定义一个OBJ变量,然后export,然后make -C到各个子目录下,在子目录下编译c文件为.o后,赋值给OBJ,在回到主makefile中链接所有obj文件,可是主makefile文件中的OBJ变量没有让子层makefile中改变。求教??为什么
最近在看跟我一起学makefile,遇到两个问题问下 1.为什么下面的makefile中的变量two-lines的值不是foo[code] test: @echo $(two-lines) define two-lines echo $(bar) endef [/code]2.在跟我一起学makefile的第七章,第四节,追加变量的最后讲到[code]variable = value variable += more 由于前次的赋值符是“=”,所以“+=”也会以“=”来做为赋值,那么岂不会发生变量的递补归定义,这是很不好的,所以make会自动为...
1. 有些内置变量是不允许修改的, 优先级最高 例如:makefile_LIST .VARIABLES 2. override 标识符 设定的变量,可以覆盖从命令行,或从环境传递的参数。优先级次之 3. 命令行参数定义的变量,没有override,不能修改,优先级第三 4. -e 命令行下的环境变量,没有 override 不能修改,优先级排第四 5. 通过赋值语句得到的变量,没有 -e 的环境变量,其他可以通过赋值语句进行赋值 的变量,优先级次之。 我是我认识到的优先级问题,...