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. 八、hibernate的查询(HQL)

    HQL:Hibernate Query Language 提供更加丰富灵活.更为强大的查询能力 HQL更接近SQL语句查询语法 面向对象的查询 "from Children where ci ...

  2. 安装软件 学习linux命令

    nm -D /usr/lib64/libstdc++.so.6 | grep GLIBCnm dumps named symbols, -D for dynamic libs, and grep fo ...

  3. 将一个对象赋值给另一个对象(使用element CheckBox中length报错)

    注意两个对象相似(比如form表单),千万不要直接赋值(会把对象的属性也变化),很容易漏掉一些属性.比如此次CheckBox报length的错误,就是因为用于存放checkbox复选框选项的数组进过赋 ...

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

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

  5. 【Database】MySQL实战45讲

    01 | 基础架构:一条SQL查询语句是如何执行的? 1. MySQL 的基本架构图: MySQL可以分成: Server层 和 存储引擎层 两部分. Server层:包含连接器.查询缓存.分析器.优 ...

  6. react-native学习(一)————使用react-native-tab-navigator创建底部导航

    使用react-native-tab-navigator创建底部Tab导航 1.使用npm安装react-native-tab-navigator npm install react-native-t ...

  7. Mysql中存储过程和函数的写法

    MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine ...

  8. BlueStore-先进的用户态文件系统《二》-BlueFS

    https://zhuanlan.zhihu.com/p/46362124 简介 上一篇文章中,介绍了BlueStore的诞生背景.逻辑架构以及设计思想,提到了在BlueStore中元数据都是存放在R ...

  9. Hibernate Session 4种对象状态

    站在持久化的角度.Hibernate把对象分为4中状态. 临时状态. 持久化状态.游离状态.删除状态. 1:Save()方法: //这个是验证:1:save方法使临时对象------>变成持久化 ...

  10. php开发面试题---php 对swoole的理解

    php开发面试题---php 对swoole的理解 一.总结 一句话总结: 以战养学,实例驱动 swoole是披着PHP外衣的C程序:其实就是c.java那些语言里面的高阶功能:比如 持久连接.异步通 ...