学习笔记一之编程基础

一、GCC

-c:只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件。

-g:产生调试工具(GNU的gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。

-O,对程序进行优化编译、链接.

gcc –O optimize.c -o optimize

time ./optimize 

time显示时间

-static:静态链接库文件

gcc –static hello.c -o hello


补充:

gcc -D 编译时定义宏/宏定义

gcc -D 编译时定义宏/宏定义(用户程序中的宏)2008年04月19日 星期六 16:05-D name, Predefine name as a macro, with definition 1.(给所编译文件定义一个宏其值为1)

# vi test.c
---------------------------------
#include <stdio.h>

#define ADD(x, y)        (x) + (y) + 10
#undef ADD
#define ADD(x, y)        (x) + (y)

#undef PDEBUG            /* undef it, just in case */
#ifdef DEBUG
#define PDEBUG(fmt, args...)    printf("cmmb_inno: line %d - %s():"fmt, __LINE__, __FUNCTION__, ##args)
#else
#define PDEBUG(fmt, args...)
#endif

int main()
{
    PDEBUG("%s and %s\n", "zengxl", "luol");
    printf("10 + 8 = %d\n", ADD(10, 8));
}


--------------------------------
# gcc test.c -D DEBUG
# ./a.out
cmmb_inno: line 16 - main():zengxl and luol
10 + 8 = 18
# gcc test.c
# ./a.out

10 + 8 = 18

二、GDB

1.编译生成可执行文件:
gcc -g tst.c -o tst
2.启动GDB
gdb tst
3. 在main函数处设置断点
break main
4. 运行程序
run

5. 单步运行
next
6. 继续运行
continue

GDB命令

list(l) 查看程序
break(b) 函数名在某函数入口处添加断点
break(b) 行号在指定行添加断点
break(b) 文件名:行号在指定文件的指定行添
加断点
break(b) 行号if 条件当条件为真时,指定行号
处断点生效,例b 5 if i=10,当i等于10时第5行
断点生效
info break 查看所有设置的断点
delete 断点编号删除断点
run(r) 开始运行程序
next(n) 单步运行程序(不进入子函数)
step(s) 单步运行程序(进入子函数)
continue(c) 继续运行程序
print(p) 变量名查看指定变量值
finish 运行程序,直到当前函数结束
watch 变量名对指定变量进行监控
quit(q) 退出gdb


三、MakeFile

make来构建和管理自己的软件工程。GNU 的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。

make在执行时, 需要一个命名为Makefile的文件。Makefile文件描述了整个工程的编译,连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译;需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要得可执行文件。

规则:用于说明如何生成一个或多个目标文件,
规则格式如下:
targets : prerequisites
command

目标依赖命令
main.o : main.c
gcc –c main.c

变量

obj=main.o func1.o func2.o func3.o
hello: $(obj)
gcc $(obj) -o hello


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值