博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux学习笔记——例说makefile 综合案例
阅读量:5989 次
发布时间:2019-06-20

本文共 2012 字,大约阅读时间需要 6 分钟。

0.前言
    从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile,假设自己动手写一个makefile总认为非常吃力。所以特意借助博客总结makefile的相关知识,通过样例说明makefile的详细使用方法。
    例说makefile分为下面几个部分,很多其它内容请參考【 】
    1.仅仅有单个C文件   
    2.含有多个C文件    
    3.须要包含头文件路径
    4.添加宏定义
    5.添加系统共享库
    6.添加自己定义共享库
    7.一个实际的样例
    【代码仓库】——
    代码仓库位于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!> hFreeModbus 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://dajlx.baihongyu.com/

你可能感兴趣的文章
php把错误日志输入到文件里。
查看>>
CodeFirst(二)Conventions
查看>>
zabbix监控URL
查看>>
mysql中用户和权限
查看>>
struts学习之Struts_ActionContext_valuestack解惑
查看>>
bean的parent与abstract属性的使用
查看>>
this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
查看>>
[NOI2010]海拔(最小割)
查看>>
Gym 101206L Daylight Saving Time 根据年月日计算星期
查看>>
信息的魅力
查看>>
python 截取汉字拼音首字母
查看>>
Java基础学习总结(28)——Java对各种排序算法的实现
查看>>
Maven学习总结(16)——深入理解maven生命周期和插件
查看>>
修炼九阴真经Windows Phone开发 (6):本地化应用程序栏Localizing an Application Bar 上...
查看>>
upsampling(上采样)& downsampled(降采样)
查看>>
【poj】lca模板题 poj1330
查看>>
【lca】lca转rmq写法 poj1330
查看>>
3年测试经验的文艺青年,从京东测试团队浅谈纯功能测试人员该何去何从?
查看>>
How to enable logging
查看>>
c语言中 *p++ 和 (*p)++ 有什么区别?以及C语言运算符的优先级。整理。
查看>>