1.格式: 

目标:依赖

  规则    规则前有一个tab键 ,缺少tab键出错,使用空格替代也不可以

(1). 例子: 编写makefile 编译 main.c ,fun.c , fun.h

test:main.o fun.o
gcc main.o fun.o -o test fun.o:fun.c
gcc -c fun.c -o fun.o
main.o:main.c
gcc -c main.c -o main.o .PHONY #此行是防止,当前编译的目录下存在clean文件,不然报错
clean:
rm *.o test

(2).  使用变量

# 使用变量代替比较长的编译工具名
CC=gcc
#使用变量代替较多的参数
CFLAGS=-c -Wall test:main.o fun.o
&(CC) main.o fun.o -o test main.o:main.c
$(CC) $(CFLAGS) main.c -o main.o
# gcc -c main.c -o main.o -Wall #不使用变量情况,使用变量时 用 $ 符取变量值 fun.o:fun.c
&(CC) $(CFLAGS) fun.c -o fun.o .PNOHY
clean:
rm *.o test

  

(3). 自动变量
$*    不包含扩展名的目标文件名称
$+    所有的依赖文件,以空格分开,并且以出现的先后为序,可能包含重复的依赖文件
$<    第一个依赖文件的名称
$?     所有时间戳比目标文件晚的依赖文件,并以空格隔开
$@   目标文件的完整名称
$^     所有不重复的依赖文件,以空格隔开

CC=gcc
CFLAGS=-c -Wall test:main.o fun.o
$(CC) $^ -o $@ # $^ 所有不重复的依赖文件,以空格隔开 main.o:main.c
$(CC) $(CFLAGS) $< -o $@ # $< 第一个依赖文件的名称,$@ 目标文件的完整名称
fun.o:fun.c
$(CC) $(CFLAGS) fun.c -o fun.o .PHONY
clean:
rm *.o test

  

(4).  隐含规则

CC=gcc
CFLAGS=-c -Wall # 隐含规则,注意目标文件必须是一个已存在的文件,下一行的规则没有,但需要tab键
main:mian.o fun.o # 此处目标不能再写test了,必须是已存在的文件名 .PHONY
clean:
rm *.o main

makefile自动编译的更多相关文章

  1. (二)Makefile——自动编译、清理、安装软件

    每次都要敲击冗长的编译命令,每次都要清理之前的编译中间结果和最终结果,在安装软件时复制剪切大量的动态库,在卸载软件时删除很多的动态库和配置文件.好吧,我被逼向了makefile. helloworld ...

  2. Makefile 多目录自动编译

    适用于多目录结构 C 工程自动编译. makefile 分成三类: 1. 工程根目录 makefile  : 这个makefile执行分成两个阶段 a)递归进入每个子目录, 逐个执行子目录里面的 ma ...

  3. 使用Ant构建struts2 web工程,自动编译,打包成war

    c&c++语言通常使用make脚本来构建和管理自己的工程,同样java也有自己的构建工具(Ant),使用时需要写一个biuld.xml,有点类似c&c++里的makefile. 一.首 ...

  4. Makefile自动生成

    automake/autoconf入门作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile ...

  5. Entity Framework 6 Recipes 2nd Edition(13-6)译 -> 自动编译的LINQ查询

    问题 你想为多次用到的查询提高性能,而且你不想添加额外的编码或配置. 解决方案 假设你有如Figure 13-8 所示的模型 Figure 13-8. A model with an Associat ...

  6. [CI] 使用Jenkins自动编译部署web应用

    写在前面 初步接触持续集成自动化过程,本篇主要介绍基于Jenkins实现持续集成的方式,通过案例介绍线上自动编译及部署的配置过程 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作 ...

  7. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  8. gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...

  9. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

随机推荐

  1. BUUCTF Youngter-drive

    exe逆向,首先查壳,发现有upx壳,upx -d脱壳,拖进ida找到主函数这里可以看到创建了两个线程,先沿着StartAddress,一直找到sub_411940,这里有一个问题,当使用f5是,会显 ...

  2. [Java 教程 00] 计算机基础

    前言 我想,来到这的朋友肯定是想学习JAVA或者想要进入IT这个行业的.考虑到大家的基础可能不一样,有些人可能还是用着新买的电脑,为了让大家在后续的学习中更加顺畅.在学习一门全新的计算机语言之前,我需 ...

  3. java synchronized的四种用法

    一 修饰方法 Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来 ...

  4. SHOW - 显示运行时参数的数值

    SYNOPSIS SHOW name SHOW ALL DESCRIPTION 描述 SHOW 将显示当前运行时参数的数值. 这些变量可以通过 SET 语句来设置,或者通过编辑 postgresql. ...

  5. (playbook)ubuntu下ansible安装docker

    --- - hosts: test sudo: yes vars: apt_packages_ca: - apt-transport-https - ca-certificates tasks: - ...

  6. IPv6 关于路由器配置静态IPv6路由的命令

    今天在学习路由器配置ipv6 的时候遇到了一点疑惑 一条命令为:ipv6 route FE80:0202::/32 serail 0/1 201 一条命令为:ipv6 route FE80:0202: ...

  7. 离线安装.NET Framework 3.5

    通过 NetFx3.cab 文件安装 NetFx3.cab下载链接: 链接:https://pan.baidu.com/s/1OPk-G_ChSwV89VZl6TV-LA 提取码:8zel 复制这段内 ...

  8. Node的优点和缺点

    (优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求, 因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多. 此外,与Node代理服务器交互的客户端代 ...

  9. 割边的tarjan算法

    与割点唯一一点不同是low[v]>=dfn[u]变为low[v]>dfn[u] 代码如下: bool vis[maxn]; int dfn[maxn],low[maxn]; int cnt ...

  10. [BOOKS]Big Data: Principles and best practices of scalable realtime data systems