Linux学习笔记——例说makefile 综合案例
2014-07-05 20:30
447 查看
0.前言
从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。
例说makefile分为以下几个部分,更多内容请参考【例说makefile索引博文】
1.只有单个C文件
2.含有多个C文件
3.需要包括头文件路径
4.增加宏定义
5.增加系统共享库
6.增加自定义共享库
7.一个实际的例子
【代码仓库】——makefile-example
代码仓库位于bitbucket,可借助TortoiseHg(GUI工具)克隆代码或者在网页中直接下载zip包。
【本例说明】
本例借助开源项目freemodbus展开来分析makefile的具体用法,freemodbus包括多个平台的移植分支,本例主要从linuxTCP入手。本文将不会阐述freemodbus的具体用法,而是以makefile的用法为主。
1.makefile文件
请替换其中的[tab],并以代码仓库中的makefile文件为主。
2.具体说明
【1】freemodbus中的文件较多,INC包括所有的头文件查找路径,路径使用前缀-I表示,请注意若路径较多时通过"\"实现续行。
【2】此处使用了共享库pthread,共享库的设备一般包括两个方面。第一,共享库的名称 DLIBS,共享库的查找路径LDFLAGS。由于pthread为系统共享库,使用了系统默认的查找路径 /usr/lib,所以LDFLAGS设置可以省略,若需要制定共享库目录,在目录前加入-L即可。
【3】$(CC) $^ -o $@ $(LDFLAGS) $(LDLIBS) 和共享库设置有关的参数需要放在链接指令中。请注意共享库应该插入链接过程中而不是编译过程。
3.执行过程
make clean && make
【控制台输出】
输出内容较多,此处省略。
【运行】
sudo ./tcpmodbus
【说明】
【1】编译时加入了头文件查找路径。
【2】链接时加入了共享库。
4.总结
【1】LDIBS指定共享库,共享库以 -l 为前缀。
【2】LDFLAGS指定共享库查找路径,路径以 -L 为前缀。
从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。
例说makefile分为以下几个部分,更多内容请参考【例说makefile索引博文】
1.只有单个C文件
2.含有多个C文件
3.需要包括头文件路径
4.增加宏定义
5.增加系统共享库
6.增加自定义共享库
7.一个实际的例子
【代码仓库】——makefile-example
代码仓库位于bitbucket,可借助TortoiseHg(GUI工具)克隆代码或者在网页中直接下载zip包。
【本例说明】
本例借助开源项目freemodbus展开来分析makefile的具体用法,freemodbus包括多个平台的移植分支,本例主要从linuxTCP入手。本文将不会阐述freemodbus的具体用法,而是以makefile的用法为主。
1.makefile文件
请替换其中的[tab],并以代码仓库中的makefile文件为主。
# 指定编译器 CC = gcc # CFLAG包括头文件目录 CFLAGS = -g -Wall # 头文件查找路径 INC = -Iport -I../../modbus/rtu \ -I../../modbus/ascii -I../../modbus/include -I../../modbus/tcp # 静态链接库 LDFLAGS = LDLIBS = -lpthread # 目标 TARGET = tcpmodbus # 源文件 SRC = demo.c port/portother.c \ port/portevent.c port/porttcp.c \ ../../modbus/mb.c ../../modbus/tcp/mbtcp.c \ ../../modbus/functions/mbfunccoils.c \ ../../modbus/functions/mbfuncdiag.c \ ../../modbus/functions/mbfuncholding.c \ ../../modbus/functions/mbfuncinput.c \ ../../modbus/functions/mbfuncother.c \ ../../modbus/functions/mbfuncdisc.c \ ../../modbus/functions/mbutils.c # 源文件编译为目标文件 OBJS = $(SRC:.c=.o) # 链接为可执行文件 $(TARGET): $(OBJS) [tab]$(CC) $^ -o $@ $(LDFLAGS) $(LDLIBS) # 清除可执行文件和目标文件 clean: [tab]rm -f $(OBJS) [tab]rm -f $(TARGET) # 编译规则 加入头文件 $@代表目标文件 $< 代表第一个依赖文件 %.o:%.c [tab]$(CC) $(CFLAGS) $(INC) -o $@ -c $<
2.具体说明
【1】freemodbus中的文件较多,INC包括所有的头文件查找路径,路径使用前缀-I表示,请注意若路径较多时通过"\"实现续行。
【2】此处使用了共享库pthread,共享库的设备一般包括两个方面。第一,共享库的名称 DLIBS,共享库的查找路径LDFLAGS。由于pthread为系统共享库,使用了系统默认的查找路径 /usr/lib,所以LDFLAGS设置可以省略,若需要制定共享库目录,在目录前加入-L即可。
【3】$(CC) $^ -o $@ $(LDFLAGS) $(LDLIBS) 和共享库设置有关的参数需要放在链接指令中。请注意共享库应该插入链接过程中而不是编译过程。
3.执行过程
make clean && make
【控制台输出】
输出内容较多,此处省略。
【运行】
sudo ./tcpmodbus
Type 'q' for quit or 'h' for help! > h FreeModbus demo application help: 'd' ... disable protocol stack. 'e' ... enabled the protocol stack 's' ... show current status 'q' ... quit applicationr 'h' ... this information >
【说明】
【1】编译时加入了头文件查找路径。
【2】链接时加入了共享库。
4.总结
【1】LDIBS指定共享库,共享库以 -l 为前缀。
【2】LDFLAGS指定共享库查找路径,路径以 -L 为前缀。
相关文章推荐
- Linux学习笔记——例说makefile 综合案例
- Linux 学习笔记_7_Linux用户管理_4_典型应用案例
- 2012.2.29 linux学习笔记 gcc makefile的使用
- linux学习笔记-makefile3
- [转]Linux学习笔记——例说makefile 头文件查找路径
- 第67课:SparkSQL下案例综合实战学习笔记
- linux环境arm裸机程序学习笔记1----makefile,中断,下载程序方法
- Linux学习笔记——例说makefile 头文件查找路径
- TQ2440 学习笔记—— 34、移植 Linux 内核【 Makefile 分析 】
- Linux学习笔记——例说makefile 增加自定义共享库
- Linux下编译环境及Makefile的学习笔记
- linux编程学习笔记(五) make的使用和Makefile
- Makefile学习笔记3:Linux下makefile基础 (zz)
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
- Linux 学习笔记之Makefile单个c文件的编写
- Linux学习笔记——例说makefile 索引博文
- Linux 学习笔记_9_文件系统管理_2_文件系统管理命令及案例分析
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
- Linux学习笔记——例说makefile 增加系统共享库 ——非常好的学习Linux makefile 等的博客
- Linux学习笔记——举例说,makefile 添加宏定义