Unix/Linux系统编程

一,开发工具

  编译器  GCC

  调试工具 GDB

  代码编辑 Vim

1. 编译命令

gcc hello.c -o hello  # 第二个hello为新生成的可执行文件名

  -o  为生成的可执行文件指定名称。

  -Wall  打印所有警告。

  -E  把用户定义的所有的预定义#define展开,会生成 .i 后缀的C源文件。

  -c  生成二进制文件,后缀名 .o 

  -g  生成可调试的可执行二进制文件

2. 调试命令

  l        list的简写,从第一行开始列出代码

   break 16    设置断点,在代码第16行

   break func   设置断点,在函数func()入口处

   info break    查看断点信息

   r         run的简写,运行程序

   n              next的简写,执行下一条语句

   p i       print i 的简写,打印变量 i 

   c       继续运行程序,continue命令简写。

   bt       查看函数堆栈。 

   finish    退出函数

   q      退出gdb

二,编写Makefile

  假设有三个文件 prog.c、 code.c、 code.h,对应的编译命令则是

$ gcc -c code.c -o code.o
$ gcc -c prog.c -o prog.o
$ gcc prog.o code.o -o test

  但是一旦修改某个文件就需要再手打一遍以上三条命令。使用Makefile以后,只要一条简单的 make 命令就全部搞定。

  Makefile 书写如下

test: prog.o code.o
        gcc prog.o code.o -o test
prog.o: prog.c code.h
        gcc -c prog.c -o prog.o
code.o: code.c code.h
        gcc -c code.c -o code.o
clean:
        rm -f *.o test

  更高级一点的,还可以加入宏来避免在Makefile出现的“硬编码”。

OBJS = prog.o code.o
CC = gcc
CFLAGS = -Wall 
test: $(BOJS)
        $(CC) $(OBJS) -o test $(CFLAGS)
prog.o: prog.c code.h
        $(CC) -c prog.c -o prog.o $(CFLAGS)
code.o: code.c code.h
        $(CC) -c code.c -o code.o $(CFLAGS)
clean:
        rm -f *.o test

   补充:

  $@  代表当前的目标(target)

  makefile 规则

目标(target) : 目标文件1 目标文件2
<tab>    gcc -o 欲新建的可执行文件 目标文件1 目标文件2
原文地址:https://www.cnblogs.com/fengyubo/p/4813660.html