鱼C论坛

 找回密码
 立即注册
查看: 2338|回复: 0

[学习笔记] 005-makefile、gdb

[复制链接]
发表于 2018-10-25 15:52:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 moc 于 2018-10-26 08:57 编辑

1、make工具
1. 简介
        ① make 是安装有GNU Make的计算机上的可执行指令,该指令读入一个名为makefile的文件,然后执行这个文件中指定的指令。
        ② Makefile文件描述了整个工程的编译、连接等规则。
        ③ 利用 make可自动完成编译工作。
                这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。
                利用这种自动编译可大大简化开发工作,避免不必要的重新编译。
2. Makefile基本规则
规则是Makefile中的核心内容,一个基本的规则如下:
TARGET … : DEPENDENCIES …
        COMMAND
        …

示例:
mycalc:add.c sub.c mul.c div.c
        gcc add.c sub.c mul.c div.c -o mycalc

规则的三要素: 目标(target)、依赖(dependencies)、命令(command)。
目标: 程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如clean,也称为伪目标(.PHONY:clean)。
依赖: 是用来产生目标的输入文件列表,一个目标通常依赖于多个文件。
命令:是make执行的动作(命令是shell命令或是可在shell下执行的程序)。
注意:每个命令行的起始字符必须为TAB字符!
3. Make工具的最核心思想
        如果DEPENDENCIES中有一个或多个文件更新的话,就需要重新生成TARGET,进而执行COMMAND命令。
判别更新的依据: 根据依赖和目标的修改时间,如果依赖时间较新则需要重新生成,否则不需要。
001 (4).jpg

111.jpg

112.jpg

4. make自定义变量、自动变量、模式规则、后缀规则等
① 普通自定义变量
        obj = main.c add.c
        obj += mul.c div.c  (变量追加值)
② Makefile维护的变量  
        通常格式为大写, 有些有默认值有些没有, 用户可以修改这些变量。
        CC:默认值 cc
        CPPFLAGS: 预处理器需要的选项 如 -I
        CFLAGS: 编译的时候使用的参数 -Wall   -g   -c
        LDFLAGS: 链接库使用的选项 -L  -l
③ 自动变量
        $@  ==>  规则中的目标
        $<  ==>  规则中的第一个依赖
        $^  ==>  规则中所有的依赖
        上面的自动变量只能在规则命令中使用。
④ 模式规则
        %.o:%.c
        %任意一个或多个字符,一旦第一个%确定下来了,第二个就跟着确定了。
        .c.o:   # 就是上面%.o:%.c的简写形式
5. make函数
1. $(value)
        表示取出变量的值
2. $(function arguments)
        make中的函数调用, function为函数名,arguments为函数参数。
wildcard pattern ==>  指定目录下匹配模式的文件.
        例如:src=$(wildcard *.c), 查找当前目录下的.c文件,存入src变量。
patsubst pattern,preplacement,text  ==> 模式替换函数
        例如:$(patsubst %.c,%.o,$src), 将src中所有的.c替换为.o,等价于$(src:.c=.o)。
执行shell命令:
        例如: $(shell ls –d */)
6. make执行
makefile文件示例:
# obj=main.o add.o sub.o mul.o

target=app
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c, ./%.o, $(src))
CC = gcc
CPPFLAGS = -I
$(target):$(obj)
        $(CC) $(obj) -o $(target)

%.o:%.c
        $(CC) -c $< -o $@

.PHONY:clean
clean:
        rm $(obj)  $(target)  -f

hello:
        echo "hello, makefile"
在makefile同级目录下,直接输入make即可执行,生成最终目标。
如果只想只想某条规则,可以=>  make  目标, 如: make clean
2、gdb工具




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表