makefile相同目标的合并之问题
2015-09-04 10:37
411 查看
target1: dep1
target1: dep2
cmd2
这种情况下,这两个相同的target1会被合并成
但如果第一条规则本身也带一个命令的话, makefile就无法合并, 给出警告,并用后面的规则替代前面的规则
最后生成的是, 其实就是后一条替代了前一条,然后给出警告
target1: dep2
cmd2
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
makefile中定义一个伪目标,这个伪目标跟.PHONY是不同的,如果一个目标中只是定义一些变量,或者一些调用没有定义相关的command,这就是一个伪目标;
在u-boot的Makefile中有这样的使用:第一个all:用来定义变量和包含相关文件,没有command, 第2个all:有相关规则和command
其实可以这样理解:通过第1个目标(伪目标)进行make前的初始化,第2个目标才是make真正执行的命令
# Include autoconf.mk before config.mk so that the config options are available
# to all top level build files. We need the dummy all: target to prevent the
# dependency target in autoconf.mk.dep from being the default.
all:
sinclude $(obj)include/autoconf.mk.dep
sinclude $(obj)include/autoconf.mk
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?= ../buildroot/output/external-toolchain/bin/arm-linux-gnueabi-
endif
# load other configuration
include $(TOPDIR)/config.mk
.....
all: $(ALL-y)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
$(obj)u-boot.srec: $(obj)u-boot
$(OBJCOPY) -O srec $< $@
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(BOARD_SIZE_CHECK)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
target1:
CROSS_COMPILE=arm-gcc
target1: dep2
cmd2
@echo CROSS_COMPILE is $(CROSS_COMPILE)
target1: dep2
cmd2
这种情况下,这两个相同的target1会被合并成
target1: dep1 dep2 cmd2 |
target1: dep1 cmd1 target1: dep2 cmd2 |
target1: dep2
cmd2
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
makefile中定义一个伪目标,这个伪目标跟.PHONY是不同的,如果一个目标中只是定义一些变量,或者一些调用没有定义相关的command,这就是一个伪目标;
在u-boot的Makefile中有这样的使用:第一个all:用来定义变量和包含相关文件,没有command, 第2个all:有相关规则和command
其实可以这样理解:通过第1个目标(伪目标)进行make前的初始化,第2个目标才是make真正执行的命令
# Include autoconf.mk before config.mk so that the config options are available
# to all top level build files. We need the dummy all: target to prevent the
# dependency target in autoconf.mk.dep from being the default.
all:
sinclude $(obj)include/autoconf.mk.dep
sinclude $(obj)include/autoconf.mk
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?= ../buildroot/output/external-toolchain/bin/arm-linux-gnueabi-
endif
# load other configuration
include $(TOPDIR)/config.mk
.....
all: $(ALL-y)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
$(obj)u-boot.srec: $(obj)u-boot
$(OBJCOPY) -O srec $< $@
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(BOARD_SIZE_CHECK)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
target1:
CROSS_COMPILE=arm-gcc
target1: dep2
cmd2
@echo CROSS_COMPILE is $(CROSS_COMPILE)
相关文章推荐
- 什么是堆和栈,它们在哪儿?
- 设计模式之简单工厂模式
- 工具篇——轻松使用Fiddler抓包(For Android)
- UVA11090 Going in Cycle (二分+判负环)
- [lintcode][美国大公司][1.字符串处理]
- 小白学习iOS开发都需要有什么基础
- 2015,继续寻找。。
- Delaunay三角网的特征
- getrlimit和setrlimit函数 设置资源权限
- cocos2d-x 3.0 (vs2012环境下亲测)把json数据转换成unicode编码来传送用户数据并且实现json数据的解析和封装
- linux vi编辑器操作手册
- linux运维实战练习-2015年8月30日课程作业
- Java断言Assert的使用以及在Eclipse中使用assert
- 23种设计模式全解析
- JS插件-日期
- 17.访问者模式
- Android之TabHost用法详解
- 消除VS中对使用不安全函数的error
- ios判断当前设备类型
- 用CSS3实现上下左右箭头