makefile 教程 模版
来源:互联网 发布:python datetime 比较 编辑:程序博客网 时间:2024/05/19 02:18
本文提供一个在GNU/Linux环境下通用的智能Makefile模板,用户可以将其引入到自己的工程当中。即使用户对此
Makefile的工作原理不甚了解,但是只需要修改少数几个关键变量,就可以满足不同的应用需求。
1. 使用环境
GNU make 3.8.1或者以上版本
sed
gcc/binutils
cygwin或者Linux
2. 关键变量
CROSS_COMPILE:交叉编译器前缀
OPTIMIZE:关于优化的编译参数
WARNINGS:关于warning的编译参数
DEFS: 关于宏定义的编译参数
EXTRA_CFLAGS:其它的编译参数
$(OPTIMIZE) $(WARNINGS) $(DEFS) $(EXTRA_CFLAGS)共同构成了传给gcc的编译参数。
INC_DIR:头文件目录
SRC_DIR:源文件目录(当前目录.是被默认包含的)
OBJ_DIR:object文件的输出目录
EXTRA_SRC:源文件列表
EXCLUDE_FILES:exclude文件列表
SUFFIX:源文件的后缀名
TARGET:最终的目标程序名
TARGET_TYPE:目标程序的类型。
可以定义的类型为:ar(static library),so(shared library)和app(application)。
最终Makefile的行为是:
在$(SRC_DIR)定义的每个目录中查找后缀为$(SUFFIX)的文件,并加上$(EXTRA_SRC)中的文件,然后排除掉
$(EXCLUDE_FILES)中的文件,获得本工程定义的源文件列表。对于每一个源文件,编译生成的一个.o文件和一个.d文件
(依赖文件),放在$(OBJ_DIR)目录下。最终生成的目标文件为$(TARGET)。
此Makefile已经充分考虑到文件之间的依赖关系,即,如果某个头文件发生改变,当运行make的时候,所有依赖于它的
源文件都将被重新编译。
附件是一个例子,演示了如何处理不同目录,如何处理不同目标类型,以及如何exclude文件。
example.rar
Makefile的工作原理不甚了解,但是只需要修改少数几个关键变量,就可以满足不同的应用需求。
1. 使用环境
GNU make 3.8.1或者以上版本
sed
gcc/binutils
cygwin或者Linux
2. 关键变量
CROSS_COMPILE:交叉编译器前缀
OPTIMIZE:关于优化的编译参数
WARNINGS:关于warning的编译参数
DEFS: 关于宏定义的编译参数
EXTRA_CFLAGS:其它的编译参数
$(OPTIMIZE) $(WARNINGS) $(DEFS) $(EXTRA_CFLAGS)共同构成了传给gcc的编译参数。
INC_DIR:头文件目录
SRC_DIR:源文件目录(当前目录.是被默认包含的)
OBJ_DIR:object文件的输出目录
EXTRA_SRC:源文件列表
EXCLUDE_FILES:exclude文件列表
SUFFIX:源文件的后缀名
TARGET:最终的目标程序名
TARGET_TYPE:目标程序的类型。
可以定义的类型为:ar(static library),so(shared library)和app(application)。
最终Makefile的行为是:
在$(SRC_DIR)定义的每个目录中查找后缀为$(SUFFIX)的文件,并加上$(EXTRA_SRC)中的文件,然后排除掉
$(EXCLUDE_FILES)中的文件,获得本工程定义的源文件列表。对于每一个源文件,编译生成的一个.o文件和一个.d文件
(依赖文件),放在$(OBJ_DIR)目录下。最终生成的目标文件为$(TARGET)。
此Makefile已经充分考虑到文件之间的依赖关系,即,如果某个头文件发生改变,当运行make的时候,所有依赖于它的
源文件都将被重新编译。
附件是一个例子,演示了如何处理不同目录,如何处理不同目标类型,以及如何exclude文件。
example.rar
下面贴出楼主常用的一个简单测试程序用的Makefile模板:
- #####################################################################
- # Copyright : GUOG reserved, 2010-2099
- # Name : Makefile for onvif_test
- # Date : 2013-09-17
- # Author : guog
- # Modity : leoluo
- # Email : leoluopy@gmail.com
- ######################################################################
- CFLAGS =-DWITH_OPENSSL -DWITH_NONAMESPACES -DWITH_DOM -I./ -I./plugin
- # -DDEBUG -g -O2
- #CROSS:=arm-hisiv100nptl-linux-
- CC:=$(CROSS)gcc
- AR:=$(CROSS)ar
- STRIP:=$(CROSS)strip
- NVT_NAME:= server_onvif
- NVC_NAME:= client_onvif
- NVT_OBJS = soapC.o soapServer.o stdsoap2.o duration.o onvif_server_interface.o onvif_server.o onvif_function.c soapClient.o
- NVC_OBJS = soapC.o soapClient.o stdsoap2.o duration.o onvif_client.o dom.o \
- plugin/wsseapi.o plugin/smdevp.o plugin/mecevp.o plugin/threads.o plugin/wsaapi.o
- all: nvt nvc
- nvt: $(NVT_OBJS)
- $(CC) ${CFLAGS} -o $(NVT_NAME) $(NVT_OBJS) -lpthread -lssl -lcrypto -luuid
- $(STRIP) $(NVT_NAME)
- nvc: $(NVC_OBJS)
- $(CC) ${CFLAGS} -o $(NVC_NAME) $(NVC_OBJS) -lpthread -lssl -lcrypto -luuid
- $(STRIP) $(NVC_NAME)
- clean:
- rm -f *.o *.a *.log plugin/*.o $(NVT_NAME) $(NVC_NAME)
Makefile 常用函数表
Makefile 常用函数表
0 0
- makefile 教程 模版
- makefile 教程 模版
- Makefile模版
- Makefile模版
- Makefile模版
- makefile 模版
- makefile 模版
- Linux应用程序Makefile模版
- makefile通用模版 示例
- 我的makefile 模版
- makefile 文件模版
- linux 下makefile 模版
- makefile通用模版使用
- Makefile 通用模版
- makefile 单文件夹模版
- makefile 项目模版
- Makefile模版的使用
- 常用的makefile模版
- 分布式处理 和 并行处理系统 定义
- 同一片蓝天下
- 鸟哥私房菜实践(10)- ISCSI
- Oracle11g——RAC使用Manual和Policy Managed方法配置
- Java----bigdecimal
- makefile 教程 模版
- OnClose()和OnDestroy()
- shell 中数学计算总结
- sp_addlinked
- swift 学习资料地址
- 以jar的形式导出java工程,用批处理命令或者dos下直接写命令,处理java工程
- 学习《Mongodb权威指南》学习笔记 (二)
- ViewPager滚动监听解释
- SizeClass和AutoLayout教程1