一,开发工具

  编译器  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

Unix/Linux系统编程的更多相关文章

  1. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  2. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  3. Linux系统编程温故知新系列 --- 01

    1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...

  4. LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题

    19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...

  5. Linux系统编程@进程通信(一)

    进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...

  6. 获得Unix/Linux系统中的IP、MAC地址等信息

    获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

  7. Linux 系统编程

    简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...

  8. Unix/Linux系统的发展史

    Unix/Linux系统相信是学编程的人都认识这两个系统.我们知道Unix要钱,而Linux免费,而且这两者之间的发展史是什么样的,是不是两者就是同一个东西呢? 我将会以时间的发展过程来一步步的给大家 ...

  9. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

随机推荐

  1. POJ-2081 Terrible Sets(暴力,单调栈)

    Terrible Sets Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4113 Accepted: 2122 Descrip ...

  2. jupyter notebook快捷键速查手册

    jupyter notebook快捷键速查手册 Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本 ...

  3. 采用jquery同django实现ajax通信

    在网页访问中通过HTTP协议中的get/post文件发送数据或请求.在浏览器中输入url后,浏览器就会帮助我们完成请求的发送和返回,并刷新更新界面.但是,如果我们不想更新界面,仅仅是发送一个get/p ...

  4. 卿学姐与公主 UESTC - 1324 分块模板题

    题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...

  5. CodeForces - 950D A Leapfrog in the Array 玄学题

    题意:n个数1~n(n<=1e18)依次放在一个数组中,第i个数位置为2i-1,其它地方是空的.现在重复以下操作:将最右边的数放到离其左边最近的空的位置,直到所有数移到前一半的位置中.有q< ...

  6. ArcGIS API for javascript开发笔记(三)——解决打印输出的中文为乱码问题

    感谢一路走来默默支持和陪伴的你~~~ ----------------------欢迎来访,拒绝转载---------------------- 1.      调用ArcGIS API的Print实 ...

  7. ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied

    参考博文:链接 ArcCatalog连接ArcSDE连接报:unable to create new database connection file,permission is denied 最近经 ...

  8. MongoDB的固态list

    在MongoDB中当前数据库所指定的list可以是一个固态的list,所谓固态就是大小确定,如创建一个固态的集合:db.createCollection("固态集合的名字",{ca ...

  9. java web启动后执行初始化任务

    写一个类继承ApplicationListener,可以直接引用下述代码,然后调用相应的方法. package com.linewell.system; import com.linewell.cac ...

  10. AspNetPager使用方法

    一.AspNetPager支持两种方式分页: 一种是PostBack方式分页, 一种是通过Url来实现分页以及Url重写功能 二.AspNetPager支持各种数据绑定控件GridView.DataG ...