Linux下gcc、gdb、Makefile、autotools生成Makefile

实验环境

实验环境是VMware的Ubuntu18.04虚拟机。
分享VMware 15Pro的安装包以及Ubuntu18.04的镜像:
VMware 15Pro
链接:https://pan.baidu.com/s/14hSjyyfVHj2DGN8G-pN2-Q 提取码:6n91
ubuntu-18.04.2-desktop-amd64
链接:https://pan.baidu.com/s/1CfC1TRmyT6oRzo--8MbioA 提取码:asfu
安装过程我试了一下VMware的简易安装,比较慢,但是VMwareTools都直接装好了,适合小白。装完后发现是PTC时间,晚了16小时,在设置里面Date&Location改成Shanghai就可以了。
Linux系统描述

gcc配置

mkdir创建一个文件夹,touch创建一个c文件。开工发现没有gcc(16.04默认自带,这是咋了?),略尴尬,sudo apt-get install
gcc。装完gcc之后执行命令gcc -g test.c -o test,-g是为了后面进行gdb调试。
又报错,说是没有stdio.h文件。stdio.h应该是gcc标准库文件,没有是个什么鬼? 首先怀疑是gcc安装出问题,命令dpkg --list查看已安装包,确实有gcc。百度之,需要执行命令sudo apt-get install build-essential,也就是安装build环境。问题又来了,我的镜像源里面没有build-essential,新装的Ubuntu的镜像源是MainServer,Ubuntu的国外服务器连接慢,东西还缺。**所以需要改一下镜像源!**改成清华的镜像源吧!
将/etc/apt文件夹下的sources.list拷贝一份!然后sudo gedit sources.list,复制粘贴如下:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

改完了sudo apt-get update一下,快到飞起!
但是我在update的时候报错了,

E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the list directory

这是因为你上一次apt时中途强制取消了,apt进程还在,资源被锁!需要杀掉当前有的apt进程,命令ps -e | grep apt找出apt进程PID,杀之!然后就可以update成功了!
update完就可以sudo apt-get install build-essential成功了。
接着查看/usr/include文件夹下多了很多文件,就包括stdio.h。然后gcc -g test.c -o test就可成功了!

gdb调试

首先gdb test可以进入gdb调试界面如图。
gdb初始界面

一些常用gdb调试命令

list [num1,num2]可以列出代码,num1、2是行数参数,默认是显示当前行开始往下10行,例如list 1,10。shell clear是清屏幕。效果如图:
gdb显示代码
补充:list [n]显示以第n行为中心的10行代码;list [函数名]显示以函数名为中心的10行代码
run命令可以运行程序,命令缩写为r,执行效果如下图,可以执行出程序的结果。
run命令
break + 函数名可以在指定函数处添加断点,命令缩写为b,执行效果如下图。
break命令
补充:break [num]表示在第几行打上断点。
info breakpoints 可以查看断点信息。如下图。
查看断点
下面开始演示:
演示gdb
start将程序定位到main第一句,step和next都是单步执行,但是next不进函数内部,step进函数内部。disp +变量名可以演示变量的值,continue可以执行到下一个断点处。演示完毕。

makefile

手动makefile

准备好例子文件,互相包含的c文件即可。makefile的文件的结构就是:
target prerequisites
rules
当先决条件prerequisites发生改变时,或者target不存在时,就要执行rules。
例如我的makefile,实在小白,勿喷!
makefile
当client不存在或者client.o、text.o修改了,就要执行下面的gcc命令!
写完makefile之后make命令就可以完成编译链接,并且方便维护!
关于clean,make clean 可以清除之前编译生成的文件。我的makefile不加这句执行make clean会报错:No rule to make clean target 。
补充:make install 命令是将生成的可执行文件放入/usr/local文件夹下。

autotools 生成makefile

在ubuntu 中需要先安装autotools,命令sudo apt-get install autoconf,可以用which aclocal命令查看命令安装位置。
步骤为:
1、使用autoscan命令生成autoscan.log configure.scan两个文件
2、使用cp命令生成configure.ac文件
3、修改configure.ac文件
找到这句 AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
其中,FULL-PACKAGE-NAME为程序名称,VERSION为当前版本,BUG-REPORT-ADDRESS为bug汇报地址。
在这里插入图片描述
4、然后在AC_INIT()后面添加一句AM_INIT_AUTOMAKE
5、执行aclocal命令生成aclocal.m4和autom4te.cache文件
6、制作Makefile.am文件
在这里插入图片描述
bin_PROGRAMS为生成的程序名称,SOURCES为需要用到的.c和.h文件。
7、执行autoheader命令生成config.h.in文件
8、automake必须文件:
install-sh、missing、INSTALL、NEWS、README、AUTHORS、ChangeLog、COPYING、depcomp
执行automake -a的时候会自动生成
install-sh、missing、INSTALL、COPYING、depcomp
9、touch命令生成其他文件
10、执行autoconf命令生成configure文件
11、执行./configure
12、执行 make,之后就可以完成常用make操作(make dist等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值