gdb和makefile
来源:互联网 发布:godaddy怎么解析域名 编辑:程序博客网 时间:2024/05/15 03:47
现在假设文件目录下有
insertsort.cbubblesort.c main.c sort.h
现在生成时打印调试信息
gcc *.c -o app -g
接着开始调试
按l,回车。默认显示包含main的文件
若要指定想调试的文件,这么写:l sort.c:20
打断点break 22/b22
条件断点 b22 if i==15
查看断点信息 i b(info breakpoint)
执行程序:start,接着按n执行一行,c(continue)
s进入函数体内部。
查看变量值p+变量名
ptype+变量名,显示变量类型
infodisplay+变量名,追踪变量
u 跳出单次循环
MakeFile
管理代码的工具
gcc也许很长,这时候就需要makefile,makefile通常由架构师编写,不由工程师编写和管理。
makefile是一个文件,记录了编译我们文件的步骤。
vim makefile
规则:目标+依赖条件+命令
格式如下:目标:依赖条件
命令
一个最简单的例子:
app:main.cadd.c sub.c ./mul.c
gcc main.c add.c sub.c mul.c -o app
然后执行make即可
我们需要的是.o
所以改写成
app:main.oadd.o sub.o mul.o
gcc main.o add.o sub.o mul.o -o app
main.o:main.c
gcc -c main.c
add.o:add.c
gcc -c add.c
sub.o:msub.c
gcc -c sub.c
mul.o:mul.c
gcc -c mul.c
太麻烦了,可以改成这样
obj=main.o add.o sub.o mul.o
target=app
$(target):$(obj)//终极目标,main.o不存在,则向下查找
gcc $(obj) -o $(target)
%.o:%.c
gcc -c $< -o $@
//%.o:%.c的作用:模式匹配,前面提到的终极目标里,main.o找不到,但是这里可以匹配,%匹配main,于是变成main.o:main.c;add.o类似
//$<也就是mian.o $@也就是app
//$^,也就是add.o sub.o mul.o
举个例子:下面这个
app:main.osub.o mul.o
gcc main.o sub.o mul.o -o app
可以写成
app:main.osub.o mul.o
gcc $^ -o $@
makefile中的自动变量
$<:规则中的第一个依赖
$@:规则中的目标
$^:规则中的所有依赖
只能在规则的命令中使用。
然后再改写下:
obj=main.o add.o sub.o mul.o
target=app
CC=gcc
CPPFLAGS = -Wall -g-I
$(target):$(obj)
$(CC) $(obj) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
写到这里,你的makefile已经让人完全无法看懂了。。。但是最后还要给一个更抽象的版本
现在我们发现.o文件要全部写一遍,太麻烦了,可它又是中间文件,由.c文件生成
所以,我们获取指定的.c,然后根据.c生成.o
src=$(wildcard ./*.c)//函数名wildcard 参数是本目录下的所有.c,然后$符号取其值
obj=$(patsubst./%.c,./%o,$(src) )//这是模式匹配,然后替换.从src取当前目录下所有.c,替换成.o
所以,我们的最新版本makefile是
target=app
src=$(wildcard ./*.c)
obj=$(patsubst./%.c,./%.o,$(src))
#target=app
CC=gcc
CPPFLAGS = -I
$(target):$(obj)
$(CC) $(obj) -o $(target)
%.o:%.c
$(CC) -c $< -o $@i
clean:
rm $(obj) $(target)i
#清除*.o和target,这个规则和终极规则完全无关
clean:
rm $(obj) $(target)
现在我们使用
make
生成.o 和app
再执行make clean ,就清理掉了.o和app,也就是说只执行clean操作
我们再加个规则以便理解
hello:
echo "hello,makefile"
你再执行make hello,只执行echo"hello,makefile"
src=$(wildcard ./*.c)
obj=$(patsubst./%.c,./%o,$(src) )
target=app
CC=gcc
CPPFLAGS = -I
$(target):$(obj)
$(CC) $(obj) -o $(target)
%.o:%.c
$(CC) -c $< -o $@
.PHONY:clean#避免提示clean是最新的
clean:
-rm $(obj) $(target) -f#-rm:忽略错误继续执行
执行两次make clean会报错,因为文件第一次就被删除了,加上参数-f即可
针对文件夹下都是含main的.c文件
src = $(wildcard *.c)
targets = $(patsubst%.c, %, $(src))
CC = gcc
CFLAGS = -Wall -g
all:$(targets)
$(targets):%:%.c
$(CC) $< -o $@ $(CFLAGS)
.PHONY:clean all
clean:
-rm -rf $(targets)
all后是要生成的所有目标文件
- 初识GDB和makefile
- gdb和makefile初步
- Makefile和gdb调试
- gdb和makefile
- 调试器GDB和Makefile
- gcc、gdb、makefile 学习和用法
- Linux笔记--4 -- GDB和makefile
- GCC+GDB+Makefile学习和使用记录
- makefile文件和gcc g++ gdb编译
- GCC与GDB工具和makefile基础
- Makefile+GDB
- makefile&gdb
- MakeFile基本语法和使用GDB调试多源文件程序
- intel dpdk api makefile 编译选项修改 和 gdb 调试
- MakeFile基本语法和使用GDB调试多源文件程序
- Linux 开发工具学习(gcc 、gdb和makefile)
- intel dpdk api makefile 编译选项修改 和 gdb 调试
- gcc/makefile/gdb常用命令
- 【智能制造】人工智能时代:互联网推动制造业升级的四大方向
- Spark源码分析之Job触发原理
- top命令
- 自然语言处理入门(一)
- 写了一个小脚本 用于监控ssh隧道
- gdb和makefile
- IE8 设置图片大小,没有效果
- Linux最常用命令及快捷键整理
- Unit9
- 创建一个Rectangle类,添加width和height两个成员变量 在Rectangle中添加两种方法分别计算矩形的周长和面积 编程利用Rectangle输出一个矩形的周
- 【特色小镇】智慧小镇:小镇建设总体规划方案
- POI异常到解决
- php扩展开发---获取cpu核数-sysconf(_SC_NPROCESSORS_CONF)
- 【财富空间】王强:在一切都在流变的时代,如何找到商业世界变化的本质?