C++笔记--Linux编程(8)-gcc gbb make

gcc

使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。

-预处理

-汇编

-链接

程序员可以再编译的任何阶段结束后停止整个编译过程以检查编译器在该阶段输出的信息

示例

#include <stdio.h>
int main(int arg, char *args[])
{
	if (arg < 3)
		printf("请输入2个参数\n");
	else
	{
		int a = atoi(args[1]);
		int b = atoi(args[2]);
		printf("%d 加 %d 等于 %d\n", a, b, a + b);
	}
	return 0;
}

在命令行键入命令编译和运行这段程序

$gcc -o hello hello.c

这行命令告诉gcc对源程序hello.c进行编译和链接,并使用参数-o指定创建名为hello的可执行程序。

整个过程看上去仿佛是一气呵成的,但其实是编译过程分几步的

编译过程

-预编译源代码;

-编译目标代码;

-链接程序

 预编译 

$gcc -o hello1.c -E hello.c

这行命令告诉gcc对源程序hello.c进行预编译,预编译结果输出到hello1.c文件中

编译 

$gcc -o hello.o -c hello1.c

这行命令告诉gcc对源程序hello.c进行编译,但不链接,编译输出到hello.o文件中

链接

$gcc -o hello hello.o

这行命令告诉gcc对源程序hello.o进行链接,生成可执行程序hello

gcc常用选项

make

makefile是一个文本形式的脚本文件,其中包含一些规则告诉make编译哪些文件,怎么样编译以及在什么条件下编译。

makefile规则遵循以下通用形式

target:dependency [dependency[…]]     

        command     

        command     

        […]

每个command第一个字符必须是tab键,而不是空格键,不然make会报错并停止

 makefile示例

start:hello.o
        gcc -o hello hello.o

hello.o:
        gcc -o hello.o -c hello.c
clean:
        rm -f hello.o

说明

target start后面的hello.o代表其下的command依赖与hello.o这个target。所以make先执行了hello.o这个target下的command

输入make clean,make会直接执行clean其下的command

makefile变量

varname=some_text

把变量用括号括起来,前面加$就可以引用该变量的值。 $(varname)

示例

CC=gcc

start:hello.o
        $(CC) -o hello hello.o
        @echo '---------------ok---------------'

hello.o:
        $(CC) -o hello.o -c hello.c

clean:
        rm -f hello.o

gdb

启动gdb gdb 程序名 [corefile]

corefile是可选的,但能增强gdb的调试能力。

Linux默认是不生成corefile的,所以需要在.bashrc文件中添加

ulimit -c unlimited (修改完.bashrc文件后记得 . .bashrc 让修改生效)

gdb最有用的功能之一就是它可以显示被调试程序中任何表达式、变量的值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值