Makefile学习
来源:互联网 发布:邮箱注册淘宝 编辑:程序博客网 时间:2024/06/04 22:47
http://blog.chinaunix.net/uid-26404201-id-3334234.html
1. := 和 =的区别
http://blog.chinaunix.net/uid-26404201-id-3334234.html先看下面的Makefile:
#example
B := $(A)
A = later
all:
@echo $(B)
执行make命令,我们发现什么都没输出,我们将第3行的:=换成=。
#example
B = $(A)
A = later
all:
@echo $(B)
执行make,输出later。
分析:B :=$(A)时,它只会到这句语句之前去找A的值,因A没有定义所以什么都没有输出。
B = $(A)时,虽然该语句之前A没有定义,但是在其后定义了,所以能输出later。
2. Makfe工具
xdc make
http://alphamailpost.blog.163.com/blog/static/20111808120127261018264/
http://blog.csdn.net/lvwx369/article/details/7695245
3. $(MAKE)使用
SUBDIRS=foo bar baz
subdirs:
for dir in $(SUBDIRS); do\
$(MAKE) -C $$dir; \
done
这个实例执行foo bar baz目录下的makefile
4. 忽略makefile中编译错误
在执行makefile中常常会出错,出错会导致makefile退出,但有些错误时无关紧要的,可以忽略,怎么处理呢?
可以在执行命令前加入符号‘-’
如:-rm 123.txt
正常情况下,如果不存在123.txt文件,执行时会出错,
加了‘-’会忽略这个错误,makefile会继续往下执行;
二. 常见Makefile写法
http://blog.csdn.net/ghostyu/article/details/7755177
1、目标名称,摆脱手动设置目标名称
- TARGET = $(notdir $(CURDIR))
- all:$(TARGET)
- CMD....
$(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名
这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择
2、使用include,把所有Makefile共享的设置包含进来
- BASE_DIR = /root/DM36x
- include $(BASE_DIR)/Rules.make
- XDC_PATH = $(DMAI_INSTALL_DIR)/packages
- DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了
3、遍历遍历所有特定的源文件
- SOURCES = $(wildcard *.c)
- HEADERS = $(wildcard *.h)
这样SOURCES变量就等于main.c func.c
HEADERS变量就等于func.h
这样就每次添加源文件后 就不需要重新修改makefile了
4、替换文件名称
- OBJFILES = $(SOURCES:%.c=%.o)
这样OBJFILES就等于main.o func.o
同样摆脱了手动修改编译的中间文件名
5、交叉编译设置
- VERBOSE = @
- COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c
- LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)
6、编译
- $(OBJFILES): %.o: %.c $(HEADERS)
- @echo Compiling $@ from $<..
- $(COMPILE.c) -o $@ $<
7、
- install: $(if $(wildcard $(TARGET)), install_$(TARGET))
- install_$(TARGET):
- @install -d $(EXEC_DIR)
- @install $(TARGET) $(EXEC_DIR)
- @install $(TARGET).txt $(EXEC_DIR)
- @echo
- @echo Installed $(TARGET) binaries to $(EXEC_DIR)..
- makefile学习
- makefile 学习
- 学习makefile
- makefile学习
- Makefile学习
- makefile学习
- Makefile学习
- 学习makefile
- makefile学习
- makefile学习
- 学习makefile
- 学习Makefile
- Makefile学习
- makefile学习
- makefile学习
- Makefile学习
- Makefile学习
- makefile学习
- DHL快递推举措增强服务能力
- 从云主机入手构建全面云安全
- 【Real】Mac 环境下安装 Php Redis 扩展
- 我们一起学习unity3d
- Sicily 1570 Hopeless Coach
- Makefile学习
- org.hibernate.QueryParameterException: could not locate named
- 最近的工总结
- IOS学习之NSString详解
- 上海室内设计总监招聘面试分析
- 备忘
- 超大容量负载方案
- java网络爬虫,使用apache httpClient
- IP协议---报文头部