Makefile 实例实践
本文为原创文章,转帖需指明该文链接
目录结构如下:
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 实例实践的更多相关文章
- makefile实例(1)-helloworld
简单makefile实例 1,源文件: main.cpp #include <stdio.h> int main() { printf("Hello World\n") ...
- Ubuntu下比较通用的makefile实例
本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...
- Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis gcc和whereis make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC ...
- makefile实例(3)-多个文件实例优化
我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一 ...
- makefile实例(2)-多个文件实例
1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * ...
- RxJava/RxAndroid 使用实例实践
原文地址 RxAndroid Tutorial响应式编程(Reactive programming)不是一种API,而是一种新的非常有用的范式,而RxJava就是一套基于此思想的框架,在Android ...
- 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% ...
- makefile实例
#.PHONY:cleanall cleanobj cleandiff #cleanall:cleandiff cleanobj # rm program #cleanobj: # rm obj.c ...
- Makefile 实例
CROSS_COMPILE = HI_CFLAGS= -Wall -O2 -g -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv ...
随机推荐
- 如何将redis中的数据导入到本地MongoDB和MySQL数据库
将redis中的数据导入到本地MongoDB数据库 创建一个process_items_mongodb.py文件(文件名自定义): #!/usr/bin/env python # -*- coding ...
- [NM 状态机2] Container状态机详解
概述 前面已经分析了RM的状态机,接下来将分析NM的状态机,NM状态机包括Container,Application,LocalizedResource三个,其中Container相对较复杂.现在我们 ...
- Android技术——在Android中的随意视图中找控件
1.在非常多情况下,我们可能不知道控件的id,可是我们却希望在包括这个控件的视图中找到它,能够採用例如以下做法: 例:在Activity的根视图中找出当中全部的Button控件 private voi ...
- Node.js meitulu图片批量下载爬虫1.051
原有1.05版程序没有断点续传模式,现在在最近程序基础上改写一版1.051. //====================================================== // m ...
- FTP服务器配置
一.FTP服务器: FTP服务使用FTP协议来进行文件的上传和下载,可以非常方便的进行远距离的文件传输,并可以实现相应的安全控制. FTP和NFS.Samba :三大文件服务器 主动模式:消息端口21 ...
- qq邮箱、qq空间点击后以word方式打开解决办法
解决办法: Internet--工具--Internet选项--程序--设为默认值
- Why do Antennas Radiate?
Obtaining an intuitive idea for why antennas radiate is helpful in understanding the fundamentals of ...
- OpenERP|ODOO高德地图应用
发布时间:2015-04-06 11:01:37来源:http://www.chinamaker.net 在openerp中的fleet模块,每一个车辆都有地图应用.默认采用的是谷歌地图,但是在应用得 ...
- Struct2-使用随笔
提要:最近写了一个2-3各页面的使用Struts2的Demo,在这里做下总结,都已经3年多没做J2EE了,有些感觉都快找不到了. 目录 1.必备开发工具 2.必备jar包 3.了解知识点 4.遇到的问 ...
- MySQL数据库的查询缓冲机制
MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...