本文为原创文章,转帖需指明该文链接

目录结构如下:

comm/inc/apue.h

comm/errorhandler.c

atexit.c

Makefile

文件内容如下:

apue.h

   #ifndef __apue_h__
  2 #define __apue_h__ #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h> //for definition of erron
#include <stdarg.h> //ISO C variable arguments
#define MAXLINE 4096 //max line length
void err_dump(const char *fmt, ...);
1 void err_msg(const char *fmt, ...);   #endif

errorhandler.c

   #include "apue.h"

   #define ERR_MESSAGE_NEED    1
#define ERR_MESSAGE_NO 0 static void err_doit(int errnoflag, int error, const char *fmt, va_list ap); //print a message, dupm core, and terminate
void err_dump(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
err_doit(ERR_MESSAGE_NEED, errno, fmt, ap);
va_end(ap);
abort();
exit();
}

atexit.c

   #include "apue.h"

   static void my_exit1(void);
static void my_exit2(void); int main(void)
{
if( != atexit(my_exit2))
err_sys("can't register my_exit2");
if( != atexit(my_exit1))
err_sys("can't register my_exit1");
if( != atexit(my_exit1))
err_sys("can't register my_exit1");
printf("main is done\n");
return ;
}

Makefile

   CC       = gcc
CFLAGS = -Wall -O -g
CXXFLAGS =
INCLUDE = -I ./comm/inc
TARGET = atexit
#search paths for errorhandler.c,当存在多个路径时,可以使用 空格 或 : 来分割这些路径
vpath %.c ./comm
8 #下行是为依赖项 apue.h 准备的,比如 [errorhandler.o:errorhandler.c apue.h] 里的
vpath %.h ./comm/inc OBJS = errorhandler.o atexit.o
all:$(OBJS)
$(CC) $(CFLAGS) $(INCLUDE) -o $(TARGET) $^
@echo ---target:$@
@echo ---depend:$^
16 #下行的 apue.h,可以不必写出来
errorhandler.o:errorhandler.c apue.h
$(CC) $(CFLAGS) $(INCLUDE) -c $^
@echo ---target:$@
@echo ---depend:$^
atexit.o:atexit.c apue.h
$(CC) $(CFLAGS) $(INCLUDE) -c $^
@echo ---target:$@
@echo ---depend:$^
clean:
rm -f *.o
rm -f $(TARGET)

在 Makefile 里

INCLUDE  = -I ./comm/inc 是为 gcc 编译文件时使用的

vpath %.c ./comm  vpath %.h ./comm.inc 是为 make 程序使用

@echo ---target:$@  是为了测试 $@ 是什么内容   @echo ---depend:$^ 是为了测试 $^ 是什么内容

Makefile 的自动变量

$@  表示目标文件
    $^    表示所有的依赖文件
    $<    表示第一个依赖文件
    $?    表示比目标还要新的依赖文件列表

Makefile 实例实践的更多相关文章

  1. makefile实例(1)-helloworld

    简单makefile实例 1,源文件: main.cpp #include <stdio.h> int main() { printf("Hello World\n") ...

  2. Ubuntu下比较通用的makefile实例

    本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html  笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...

  3. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

    一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...

  4. makefile实例(3)-多个文件实例优化

    我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一 ...

  5. makefile实例(2)-多个文件实例

    1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...

  6. RxJava/RxAndroid 使用实例实践

    原文地址 RxAndroid Tutorial响应式编程(Reactive programming)不是一种API,而是一种新的非常有用的范式,而RxJava就是一套基于此思想的框架,在Android ...

  7. Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入) 转

    http://www.crazyant.net/2011/10/29/linux%E4%B8%8Bgcc%E5%92%8Cmakefile%E5%AE%9E%E4%BE%8B%EF%BC%88%E4% ...

  8. makefile实例

    #.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...

  9. Makefile 实例

    CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...

随机推荐

  1. (转)Android项目重构之路:实现篇

    前两篇文章Android项目重构之路:架构篇和Android项目重构之路:界面篇已经讲了我的项目开始搭建时的架构设计和界面设计,这篇就讲讲具体怎么实现的,以实现最小化可用产品(MVP)的目标,用最简单 ...

  2. Java反转单链表

    class Node { private int data; private Node nextNode; public Node(int data) { this.data = data; } pu ...

  3. ztree3.5.02选中结点时报错

    ztree3.5.02选中结点时报错 更新jquery版本后,使用jquery1.1.1,左键点击Tree里的节点的时候报错,虽然不影响显示,但是在chrome控制台显示报错 Uncaught Typ ...

  4. Introducing MVC

    PS:这本书感觉不怎么样,这么多低频词就倒人胃口... Suppose you'v recently launched a new web site, only to find that it's s ...

  5. 修改HTML5 input placeholder默认颜色

    WebKit和Blink(Safari,Google Chrome, Opera15+)使用伪元素 ::-webkit-input-placeholder Mozilla Firefox 4-18使用 ...

  6. Latex中设置字体颜色

    在用Latex时,想要使用不同颜色来突出某些关键点,有以下三种方案: 1.组合red.green和blue的值合成我们想要的颜色 \usepackage{color} \textcolor[rgb]{ ...

  7. 通过 thread dump 分析找到高CPU耗用与内存溢出的Java代码

    http://heylinux.com/archives/1085.html通过 thread dump 分析找到高CPU耗用与内存溢出的Java代码 首先,要感谢我的好朋友 钊花 的经验分享. 相信 ...

  8. form表单中的id 与name的区别

    以前经常写form表单时,不写id和name,总觉得没有什么用.后来一看后台套完的页面发现,他们都补上name,不知道所以然,就查了一下资料,吓我一跳,要是照我那样写根本不会有数据传到服务器.原来表单 ...

  9. 前端JS脚本将网页表格导出为Excel

    话不多说,上代码! <!DOCTYPE> <html> <head> <title>Excel Test</title> </head ...

  10. sql server使用sql插入中文字符串乱码问题

    在插入语句前加N就行了 sb.Append(string.Format("update chapter set [content]=N'{0}' where Id ={1} ;", ...