002编程基础----makefile
一、总述
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相关推荐
- 3 编程基础 Makefile
Makefile:规定源文件之间的依赖关系及编译规则 make -f Makefile 例如: # This is a Makefile hello:hello.o gcc hello ...
- JNI编程基础(二)——Android Studio NDK开发
由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...
- python网络编程证书_《Python网络编程基础》笔记
python网络编程基础 ================== Author: lujun9972 Date: 2013-03-08 22:29:20 CST Table of Contents == ...
- 深度学习笔记第一门课第二周:神经网络的编程基础(上)
本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...
- Python3——网络编程基础
Python3--网络编程基础 基础知识参考: https://blog.csdn.net/wqx521/article/details/51037048 https://blog.csdn.net/ ...
- linux 变量c file代表的内容.,LinuxC编程基础--mak.ppt
第二章 Linux C编程基础--make,GNU make管理项目,为什么要使用make? 工作量问题:对于拥有多个(上百个)源文件的软件项目,只需编写一次编译过程,而不需要在每次源文件修改后重复输 ...
- Python编程基础——编程环境准备工作
Python编程基础--编程环境准备工作 Anaconda的安装与使用 介绍 下载与安装(本文仅以Win10为例) Pip的基本使用与镜像源设置 介绍 Pip镜像源设置(本文仅以Win10为例) Pi ...
- 神经网络的编程基础(转自吴恩达)
第二周:神经网络的编程基础(Basics of Neural Network programming) 文章目录 第二周:神经网络的编程基础(Basics of Neural Network prog ...
- linux kernel内核编程基础总结
Linux_kernel编程基础总结 时间:2015/10/9 背景:学习linux内核编程,总结学习中的经验,方便之后查看: 通常我们想弄清楚linux内核是怎么样工作的,如何使用内核接口来编写li ...
最新文章
- 四旋翼建模与开源飞控算法(草稿,待整理)
- 使用jQuery实现图片懒加载原理
- 使用率激增250%,这份报告再次将 Serverless 推向幕前
- 帝人製机--适合的机遇--遇到恰到好处的产品--工业机器人减速机造就一个百年企业
- java以Blob形式存储,读取图片并在jsp页面显示图片流
- 用python画派大星代码_Python多线程处理数据,并打印进度条
- restful api和普通api有什么特点_Django REST Framework教程(1): 什么是序列化和RESTful的API
- AI即开即用,这是悄然推出的“腾讯最新AI技术”小程序
- NYOJ题目48-小明的调查作业
- Java和C++的对照
- 记录一次pl2303串口驱动解决故障
- 基于单片机的导盲拐杖设计
- android6.0以上模拟位置状态检测
- Jira+Confluence+Fisheye+Crucible安装步骤清单
- android实现延时的方法,Android实现延时总结
- java综合知识点总结基础篇
- java 庖丁解牛_庖丁解牛 --JAVA 栈的实现
- C语言字符串去空格(最简单版本)
- 存储器2-两种接口:LVTTL和STTL接口
- 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02
热门文章
- react-router的使用(三)——路由的嵌套
- python网络爬虫系列(六)——数据提取 lxml模块
- Java 类的封装、继承、多态
- LeetCode 291. 单词规律 II(回溯)
- LeetCode 1458. 两个子序列的最大点积(动态规划,类似编辑距离)
- LeetCode 1025. 除数博弈(动态规划)
- 剑指Offer - 面试题6. 从尾到头打印链表(栈,递归,反转链表)
- POJ 1200 Crazy Search 查找有多少种不同的子串(hash)
- matlab玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神
- lammps软件_Lammps模型构建的方法之一:组合模型构建