刷脸支付 哨兵模式 xaml xamarin 虚拟机 callback seo jQuery Mobile vue例子 vue数据绑定 springboot单点登录 oracle查看数据库 oracle自增长 bootstrap文本框 matlab区分大小写吗 手动安装fastboot驱动 docker导入镜像 python中index的用法 python抛出异常 python抛异常 python变量定义 javaqueue java运行环境配置 java结束线程 python源码下载 千元以下最好的手机 小程序源码下载 vue上传文件 cms教程 模拟人生2夜生活 comsol下载 js正则匹配字符串 polyworks jquery手册 dota2控制台 全能音频转换通 夜之魇掉落 微信昵称特殊字符保存 python编辑器 起义任务线
当前位置: 首页 > 学习教程  > 编程语言

makefile 目标:依赖文件写法

2020/12/5 10:00:26 文章标签:

简要说下makefile的一个基本格式: 目标:依赖文件(目标) 【tab】命令 “目标” :是你要生成的或操作的命令的索引 “依赖” :是生成目标依赖的文件或目标【依赖文件的任一处改动,将导致已存在…

简要说下makefile的一个基本格式:

目标:依赖文件(目标)

【tab】命令

“目标” :是你要生成的或操作的命令的索引

“依赖” :是生成目标依赖的文件或目标【依赖文件的任一处改动,将导致已存在的目标文件过期】

“命令” :是为了生成目标的给shell执行的命令

需要注意的是,依赖的作用:

【依赖文件的任一处改动,将导致已存在的目标文件过期】

依赖的作用就是决定目标是否过期,是否需要重新编译。

举个例子:

#include <stdio.h>
#include "mylib1.h"
#include "mylib2.h"
 
int main(int argc, char argv[]){
    printf("hello world!\n");
}

我的makefile可以写成

helloworld : stdio.h mylib1.h mylib2.h other.o
gcc -o helloworld helloworld.c

也可以写成

helloworld : other.o
 gcc -o helloworld helloworld.c

前者希望在stdio.h mylib1.h,mylib2.h,other.o 改变的时候重新编译helloworld.c,后者希望仅仅在other.o改变的时候重新编译helloworld.c。

因此,

你想helloworold在什么改变的时候重新编译,就把什么写在依赖里。这就是依赖,并不死板的规定所有头文件必须写在依赖里。(不过一般而言,为了目标能正常执行,都希望自己写得头文件发生了改变,重新编译目标)

========================================================================================

依赖的另外一个常做用途是:执行指定的目标

例如:

.PHONY: all

all : helloworld clean

helloworld:helloworld.o

gcc helloworld.o -o helloworld

helloworld.o:

gcc -c helloworld.c

clean:

rm helloworld.o

all作为终极目标(即makefile的最上面的第一个目标),依赖helloworld和clean,因此,执行生成all目标前(实际上由于all目标没有命令,因此在处理完依赖后直接退出,并没有all生成),会先执行helloworld和clean目标。


本文链接: http://www.dtmao.cc/news_show_450122.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?