Makefile PHONY】的更多相关文章

case 1: Makefile clean: rm a environment_1 : There is only file a $ make clean clean a environment_2 : There are two file a and clean $ make clean make: 'clean' is up to date. can't clean a case 2: Makefile .PHONY: clean clean: rm a environment_1 : T…
看下面的例子 Makefile文件 .PHONY: cleanclean: rm *.o 当Makefile文件所在目录有文件名为clean的文件,命令行“.PHONY: clean”又没添加的话,执行make clean是无效的 所以“.PHONY: clean”就是保证即使目录下有文件名为clean的文件,也能正常执行make clean…
Phony Targets PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行.例如: clean: rm *.o temp因 为"rm"命令并不产生"clean"文件,则每次执行"make clean"的时候,该命令都会执行.如果目录中出现了"clean"文件,则规则失…
1.程序代码结构如下 makefile/ |-- Makefile |-- haha.c `-- hehe.c 1.1.需要被编译的源代码如下 $ cat haha.c #include "stdio.h" int main() { printf("ha ! ha !\n"); ; } $ cat hehe.c #include "stdio.h" int main() { printf("he ~ he ~\n"); ; }…
Makefile和Make Rules 多模块软件.依赖树和Make 默认规则 Make使用程序对简单变量的支持 内建变量 虚目标 特殊目标 一般性语法错误及其纠正措施 命令行的使用和调试 Makefile中常用规则总结 make常用选项 -d  显示调试信息 -f  指定从哪个文件中读取依赖关系信息.默认文件是“Makefile”或“makefile” ,"-"表示从标准输入 -h 显示所有的Makefile的help信息 -n  打印所有Makefile执行命令,但不执行这些命令…
uboot提供了两种编译策略,即可以将生成的目标文件与源码混在一起,也可以将生成的目标文件与源码分开.通过对uboot Makefile的分析,笔者编写了一个简单的实现这种功能的Makfile. 顶层makefile ifneq ($(BUILD_DIR),) saved-output := $(BUILD_DIR) # Attempt to create a output directory. $(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DI…
一.本文说明 本文为linux内核Makefile整体分析的续篇,是依据Linux内核Makefile体系的主要内容编写一个简要的测试工程.Linux内核Makefile体系就好像一只“大鸟”,而这篇测试算是“麻雀”,主要是为了通过动手实战进一步理解Linux内核Makefile体系的原理和特点. 二.源码结构 1.测试源码包括1个顶层目录以及5个子目录. 2.Makefile体系的构成是顶层1个Makefile文件.scripts目录中的4个脚本文件以及add.sub.main三个目录中的Ma…
二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包含该头文件的源文件.利用这个自动编译可大大简化开发 工作,避免不必要的重新编译.   make工具通过一个称为Makefile的文件来完成并自动维护编译工作. Makefile文件描述了整个工程的编译.链接等规则. 02.Makefile的基本规则:   TARGET...:DEPENDENCIES…
make常用内嵌函数 1.函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2.Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当前目录下的文件 例如:src=$(wildcard *.c) #匹配当前目录下所有的.c文件 2)$(patsubst PATTERN,REPLACEMENT,TEXT) #模式替换函数 例如:$(patsubst %.c,%.o,$src) #等价于$(src:%.c=%.o)[常用] 3)she…
原文转自:http://blog.sina.com.cn/s/blog_87c063060101c9yp.html 1.在写 多目录下makefile的时候,碰到一个错误提示,让我纠结许久,后面还是解决了,这个错误不容易被发现. 2.错误提示如下: Makefile:8: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop. 3.先来说一下我想干什么,有些什么? 想干什么: 搭建一个Linux  LCD的裸机开…
$@    目标文件名 $< 第一个依赖文件名 $^ 规则所有依赖文件列表 如果不想让执行语句被打印出来,就在语句前面加上@符号 模式规则 %.o:%.c 后缀规则 .c.o 生成单进程的Makefile PHONY:clean OBJECTS = main.o add.o sub.oCFLAGS = -Wall -gCC = gcc app:$(OBJECTS) $(CC) $(CFLAGS) $^ -o $@ %.o:%.c$(CC) $(CFLAGS) -c $< -o $@ clean…
Makefile中怎样调用python和perl文件为自己提供须要的数据,利用print函数对外输出数据 实例代码例如以下 perl.pl #!/usr/bin/perl print("hello, perl") python.py #!/usr/bin/env python print("hello, python") Makefile .PHONY:all PARAM1 := $(shell ./perl.pl) PARAM2 := $(shell ./pyth…
1.静态库libtools.a源码 libtools.h #ifndef tools_h_ #define tools_h_ int sub(int x,int y); int mul(int x,int y); #endif libtools.cpp #include"libtools.h" int sub(int x,int y) { return x - y; } int mul(int x ,int y) { return x * y; } 2.动态库libutility.so…
发现有童鞋不是很清楚ZMQ中的“请求-回复”模式中的ROUTER怎么用,所以简单介绍一下“请求-回复”模式的使用(最后付代码). 一.讲一讲 1.要使用zmq 通过一个router进行通信,你首先需要知道ZMQ中的“请求-回复”模式,不清楚的话可以先看一下下面这篇文章,连接如下: http://www.cnblogs.com/fengbohello/p/4354989.html 在“请求-回复”模式中,router是一个比较特殊的 socket类型,它会把它接收到的第一个消息作为消息来源的标志,…
makefile .PHONY:clean all CC=gcc CFLAGS=-Wall -g ###replace your bin BIN=simple_write simple_read copy_system all:$(BIN) %.o:%.c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f *.o $(BIN) simple_write.c /* #include <unistd.h> ssize_t write(int fd, const…
三.gdb调试(上) 01.gdb:gdb是GNU debugger的缩写,是编程调试工作. 功能:   启动程序,可以按照用户自定义的要求随心所欲的运行程序:   可让被调试的程序在用户所指定的调试的断点处停住(断点可以是条件表达式):   当程序停住时,可以检测此时程序中所发生的事:   动态改变量程序的执行环境. #vi smiple.c #include<stdio.h> #include<stdlib.h> long func(int n); int main(int a…
原由 项目中经常需要使用base64进行处理,通过base64可以将特殊字符转化为普通可见字符,便于网络传输,代价是增长了传输长度. base64将每3个byte转化为4个6bit位,然后高位补两个零.这意味着,base64编码后长度会变长. 当源文长度不是3的倍数时,需要补零.编码后以等号“=”表示.至多有1至2个补零的情况出现,则结尾最多一至两个等号. 编码后长度可预测4*(len+2)/3. base64是个可逆编码. 源文长度预估如下:末尾等号个数为p(此时p小于等于2),编码长度l (…
记在前面的杂七杂八 内核的生成,实际上最终的目的是生成一个binary文件zImage,大小2-5MB的数量级. 用户可以从kernel.org得到的tar.gz格式的内核源代码,此代码解压后,就会生成初始状态的内核源代码树,这种状态称为内核的初始状态. 通过make mrproper/make distclean等指令,可以使内核恢复到刚解压的状态.其中make mrproper只清除包括.config文件在内的,为内核编译及连接而生成的诸多配置文件.distclean对象执行mrproper…
socket函数 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 创建一个套接字用于通信 参数: domain:指定通信协议族(protocol family),常用取值AF_INET(IPv4) type:指定socket类型, 流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字SOCK_RAW protocol…
本篇博客定义一套用于TCP通信比较实用/好用Socket类库(运用C++封装的思想,将socket API尽量封装的好用与实用), 从开发出Socket库的第一个版本以来, 作者不知道做了多少改进, 每次有新的/好的想法尽量实现到该库当中来; 而且我还使用该库开发出作者第一个真正意义上的基于Linux的Server程序[MyHttpd, 在后续的博客当中, 我一定会将MyHttpd的实现原理与实现代码更新到这篇博客所属的专栏中, 希望读者朋友不吝赐教]; 可能在以后的学习和工作中, 作者还可能会…
信号量API #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(key_t key, int nsems, int semflg); int semctl(int semid, int semnum, int cmd, ...); int semop(int semid, struct sembuf *sops, unsigned nsops); semget int…
1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For mode constants */ #include <mqueue.h> mqd_t mq_open(const char *name, int oflag); //专用于打开一个消息队列 mqd_t mq_open(const char *name, int oflag, mode_t mode…
ipc.h #include <sys/types.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #ifndef _IP…
mmap 功能描述: mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零.munmap执行相反的操作,删除特定地址区域的对象映射. 基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新.如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引时会更新该字段的值.用PROT_WRITE 和 MAP_SHARED标志建立起来的文件映射,其st_ctim…
Linux内核源码中,差不多有300个内核子目录都包含了名为Kconfig的文件.这个文件用于配置其所在目录的源码的特性.Kconfig中的每个配置参数都有附带的帮助文本,配置子系统会解析Kconfig的内容,并提示用户做出配置选择. 配置工具(比如menuconfig)会读取各个子目录中的Kconfig文件,首先读取的是arch子目录中的Kconfig文件.它是在-/scripts/kconfig/Makefile中读取的,这个Makefile包含了与下列内容类似的相关条目: # ======…
一.查看Linux内核版本命令(两种方法): 1.cat /proc/versionz [root@localhost ~]# cat /proc/versionLinux version 2.6.18-194.8.1.el5.centos.plus (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010 2.uname…
linux进程间双向消息队列 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/msg.h> typedef struct { long type; int id; ]; }msg_t;…
前言 静态链接库会编译进可执行文件,并被加载到内存,会造成空间浪费 静态链接库对程序的更新.部署.发布带来麻烦.如果静态库更新了,使用它的应用程序都需要重新编译.发布给用户(对于玩家来说,可能是一个很小的改动,却导致整个程序重新下载,全量更新) 动态库在程序编译时并不会被链接到目标代码中,而是在执行文件中记录对动态库的引用,在程序运行时才被载入.不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题.动态库在程序运行时才被载入,也解决了静态库对程序的更新.部署…
库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.库有两种:静态库(.a..lib)和动态库(.so..dll) 静态库 之所以称为“静态库”,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中.因此对应的链接方式称为静态链接. 静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库必定跟.o文件格式…