linux中的make例子下载,Linux学习笔记——例说makefile 综合案例

本文通过开源项目freemodbus的makefile配置实例,详细解析了makefile的基本结构和使用方法,包括单个及多个C文件的编译、头文件路径的设定等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前言

从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力。所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法。

例说makefile大致分为4个部分

1.只有单个C文件

2.含有多个C文件

3.需要包括头文件路径

4.一个较为复杂的例子

代码仓库位于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)

# 编译规则 加入头文件 [email protected] $< 代表第一个依赖文件

%.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 为前缀。

原文:http://blog.youkuaiyun.com/xukai871105/article/details/37078545

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值