1、为什么要用Makefile进行多个.C文件的编译:
(1).一般我们在进行项目开发的时候,会建立工程,下面有许多目录,不同目录下又有许多.C文件,这事就需要联合编译了。
(2).我们自己手动编译的话,多个程序文件交织在一起,会出现不同文件资源之间的依赖与被依赖关系。那么在编译的时候就会出现问题:必须先解决被依赖项,在解决依赖项。
在这种情况下,我们进行手动编译的话,将会变得异常困难,首先我们必须记住依赖关系,才能知道编译顺序,其次每一次都要执行非常多的gcc编译命令才能完成最终的编译目标(gcc中还带有许多参数呢)。
(3). 这时就得用Makefile,Makefile是工程管理的有效工具,用脚本语言进行编写。
2、Makefile的使用规则:
使用命令: make test
./test (test就是你最终生成的目标文件)
make:只修改你新改动的文件
Makefile中的书写规则:
目标... : [依赖项...]
[[@]命令]
(1).[]中为可写可不写的内容。
(2).@符号:命令在终端上出现的关闭符号。
(3).命令前必须有一个tab符号。
Makefile中可以定义变量,好处:减少书写规则。
变量的使用格式:${变量名称}。
自动变量:
命令 | 解释 |
$@ | 代表规则里的目标文件 |
$^ | 代表规则里所有依赖文件 |
$< | 代表规则里第一个依赖文件 |
%.o : %.c | 所有的.o文件均一一对应依赖与其后的.c文件(模式规则) |
注意:(1).Makefile当中出现.PHONY:clean 意思是,当前目录下也有clean文件时,执行Makefile中的命令clean。
(2).当其中有确定规则时,执行确定规则的命令。
这个是没有使用变量前的Makefile内容。
这个是使用变量后的精简Makefile。
3、头文件的一点知识。
< >和" "的区别:
a、< >,在系统的指定目录下去找,一般情况下在/usr/include/xxx.h
b、" ", 在当前目录下找
头文件的格式:
#ifndef _TEST_H_
#define _TEST_H_
......
#endif 条件预编译目的:防止头文件的重复包含。
4、gdb的使用
(1).命令:gcc -g test.c -o test (-g是调试程序必须用的参数)
gdb -q test (-q跳过提示,直接调试) (test要调试的目标文件)
start 进入调试
s和n: s表示遇到函数,进入函数,跳转到函数进行调试;n表示不进入函数,继续往下调试。
(2).设断点 b 行数
run : 此时将跳转到该行执行;
删除断点 d n(n不是行数,表示将第几个断点删除)
查看断点 info b
(3).一些输出:
打印/格式 相应的量
p/x str p/c *str p/d str ......可以查看相应的地址,值,字符......
离开gdb调试:q