一、总述

make来构建和管理自己的软件工程。

GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。

make 在执行时,需要一个命名为Makefile的文件。

Makefile文件描述了整个工程的编译,链接规则。包括:

1、工程中哪些文件需要编译

2、需要创建哪些文件

3、如何创建这些文件

4、如何产生我们想要的可执行文件。

例如:

hello: main.o func1.o func2.o

  gcc main.o func1.o func2.o -o hello

main.o:main.c

  gcc -c main.c

fun1.o:func1.c

  gcc -c func1.c

func2.o:func2.c

  gcc -c func2.c

二、Makefile术语

1、规则:用于说明如何生成一个或多个目标文件,格式如下:

target:prerequisites

  command

即,目标  依赖  命令

main.o:main.c

  gcc -c main.c    命令需要tab键

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为两者之一时,可以使用如下方法指定:

make -f 文件名

2、伪目标

Makefile中把那些没有任何依赖只有执行动作的目标称为“伪目标”(phony targets)。

.PHONY : clean

clean:

  rm -f hello main.o func1.o func2.o

".PHONY"将“clean”目标声明为伪目标。

3、变量

obj=main.o func1.o func2.o func3.o

hello:$(obj)

  gcc $(obj) -o hello

另外,makefile中,存在系统默认的自动化变量

$^:代表所有的依赖文件

$@:代表目标

$<:代表第一个依赖文件

改写:

hello:main.o func1.o func2.o

  gcc $^ -o $@

4、杂项

makefile中“#”字符后的内容被视作注释

hello:hello.c

  @gcc $^ -o $@

第一个“@”用于取消回显。

转载于:https://www.cnblogs.com/liutianyi10/p/3837969.html

002编程基础----makefile相关推荐

  1. 3 编程基础 Makefile

    Makefile:规定源文件之间的依赖关系及编译规则 make -f Makefile 例如: # This is a Makefile hello:hello.o         gcc hello ...

  2. JNI编程基础(二)——Android Studio NDK开发

    由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...

  3. python网络编程证书_《Python网络编程基础》笔记

    python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...

  4. 深度学习笔记第一门课第二周:神经网络的编程基础(上)

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  5. Python3——网络编程基础

    Python3--网络编程基础 基础知识参考: https://blog.csdn.net/wqx521/article/details/51037048 https://blog.csdn.net/ ...

  6. linux 变量c file代表的内容.,LinuxC编程基础--mak.ppt

    第二章 Linux C编程基础--make,GNU make管理项目,为什么要使用make? 工作量问题:对于拥有多个(上百个)源文件的软件项目,只需编写一次编译过程,而不需要在每次源文件修改后重复输 ...

  7. Python编程基础——编程环境准备工作

    Python编程基础--编程环境准备工作 Anaconda的安装与使用 介绍 下载与安装(本文仅以Win10为例) Pip的基本使用与镜像源设置 介绍 Pip镜像源设置(本文仅以Win10为例) Pi ...

  8. 神经网络的编程基础(转自吴恩达)

    第二周:神经网络的编程基础(Basics of Neural Network programming) 文章目录 第二周:神经网络的编程基础(Basics of Neural Network prog ...

  9. linux kernel内核编程基础总结

    Linux_kernel编程基础总结 时间:2015/10/9 背景:学习linux内核编程,总结学习中的经验,方便之后查看: 通常我们想弄清楚linux内核是怎么样工作的,如何使用内核接口来编写li ...

最新文章

  1. 四旋翼建模与开源飞控算法(草稿,待整理)
  2. 使用jQuery实现图片懒加载原理
  3. 使用率激增250%,这份报告再次将 Serverless 推向幕前
  4. 帝人製机--适合的机遇--遇到恰到好处的产品--工业机器人减速机造就一个百年企业
  5. java以Blob形式存储,读取图片并在jsp页面显示图片流
  6. 用python画派大星代码_Python多线程处理数据,并打印进度条
  7. restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
  8. AI即开即用,这是悄然推出的“腾讯最新AI技术”小程序
  9. NYOJ题目48-小明的调查作业
  10. Java和C++的对照
  11. 记录一次pl2303串口驱动解决故障
  12. 基于单片机的导盲拐杖设计
  13. android6.0以上模拟位置状态检测
  14. Jira+Confluence+Fisheye+Crucible安装步骤清单
  15. android实现延时的方法,Android实现延时总结
  16. java综合知识点总结基础篇
  17. java 庖丁解牛_庖丁解牛 --JAVA 栈的实现
  18. C语言字符串去空格(最简单版本)
  19. 存储器2-两种接口:LVTTL和STTL接口
  20. 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02

热门文章

  1. react-router的使用(三)——路由的嵌套
  2. python网络爬虫系列(六)——数据提取 lxml模块
  3. Java 类的封装、继承、多态
  4. LeetCode 291. 单词规律 II(回溯)
  5. LeetCode 1458. 两个子序列的最大点积(动态规划,类似编辑距离)
  6. LeetCode 1025. 除数博弈(动态规划)
  7. 剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)
  8. POJ 1200 Crazy Search 查找有多少种不同的子串(hash)
  9. matlab玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神
  10. lammps软件_Lammps模型构建的方法之一:组合模型构建