其本质是用来编译工程文件(内部可以理解为g++命令),用make命令,实现自动化编译。格式如下:

目标:依赖

(tab) 命令

介绍makefile的最初级版本

当前目录下有 main.cpp temp.cpp temp1.cpp

执行vim makefile 然后输入指令

main:main.cpp temp.cpp temp1.cppg++ -o main main.cpp temp.cpp temp1.cpp

终端输入make,执行写好的指令。

这种方法弊端太多,如果工程文件很多,那么makefile中的代码量太大,如果其中的某一个cpp文件被修改,那么其他的文件需要重新被编译,没必要。

接下来介绍makefile中的变量(执行的功能相当于宏替换):

自定义变量:

例:foo =abc  bar=$(foo) 把bar替换成abc;

自带变量:CC  CPPFLAGS

自动变量:$@  $< $^

模式规则 % .o:%.c

引入高级版本的makefile

target=main2//名字可替换
objects=main.o temp.o temp1.o
CC=g++
CPPFLAGS=-I./
$(target):$(objects)//g++ -o main2 main.o temp.o temp1.o$(CC) -o $@ $^//$@规则中的目标
%.o :%.c$(CC) -c $< $(CPPFLAGS)//$<第一个条件
.PHONY:clean//伪目标,不检查依赖和更新
clean://删除 可执行文件以及.o文件rm -f $(objects) $(target)

执行make

当前目录下会生成 .o与可执行文件main2,执行makefile clean后清理完成,文件消失。

至此,makefile文件建立完毕。

makefile文件:编译工程文件相关推荐

  1. 【C++】(九)作用域、生命期、头文件和工程文件

    文章目录 作用域和生命期 1 局部变量和全局变量 1.1 局部变量 1.2 全局变量 2 作用域 3 生命期 4 内部函数与外部函数 5 头文件与工程文件 作用域和生命期 1 局部变量和全局变量 1. ...

  2. linux新建好文件后怎么编译,使用autoconf生成Makefile并编译工程的步骤

    前言 在Linux下,编译和链接需要用Makefile,而写好一个Makefile可不容易,写出一个规范的Makefile更是麻烦.我们可以利用autoconf来生成一个Makefile,尤其在大型工 ...

  3. Progamming Erlang 通过 Makefile 自动编译 .erl 文件

    通过 makefile 可以自动化一部分工作,比如编译 .erl 文件 一.在 /root/workspace/erlang/test 中新建两个 .erl 文件,分别是 test.erl ,test ...

  4. Makefile独立编译ko文件

    在工作的过程中,经常需要编译一些Ko模块,如果是单个的c文件编译直接在内核源码里面 obj-m=xxx.o就好 如果这个ko文件需要多个c文件共同编译生成的话,最好以如下的模板来完成编译较好 #首先指 ...

  5. Eclipse java工程中添加文件+导入工程文件

    1.添加源文件 在eclipse上建好java工程,想从别的地方把.java文件加进来,先把.java文件拷贝到src目录下,然后,在src文件夹下按F5刷新就可以了. 2.导入存在的工程文件 在开始 ...

  6. 编写Makefile:编译当前文件夹以及子文件夹下所有的ccpp文件并生成可执行文件

    makevar: (预定义一些变量,包括编译器,g++/gcc编译的参数,全局宏定义等,该文件会包含在Makefle中) KE := make CC := gcc CXX := g++ CXXFLAG ...

  7. 【MFC】MFC工程文件详解

    00. 目录 文章目录 00. 目录 01. 概述 02. 解决方案相关文件 03. 工程相关文件 04. 头文件和源文件 05. 资源文件 06. 预编译头文件 07. 编译目标和中间文件 08. ...

  8. STM8学习笔记---新建IAR工程文件

    1.打开IAR工具 2.选择Project-Create New Project 3.选择Empty project,点击OK. 4.选择文件存储路径,输入工程名,点保存按钮. 5单击左上角新建文件按 ...

  9. 痞子衡嵌入式:ARM Cortex-M开发文件详解(3)- 工程文件(.ewp)

    出处:https://www.cnblogs.com/henjay724/p/8232585.html 大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的project文件. ...

最新文章

  1. python 中*args 和 **kwargs的区别
  2. Mysql 内部结构 / Replication | 原理
  3. linux更换主板后无法启动网卡
  4. python List,切片的用法
  5. Jackson反序列化提示:Can not deserialize instance of Task out of START_ARRAY token
  6. android智能刷新smart,Android横向智能刷新框架-SmartRefreshHorizontal
  7. android socket 长连接_php socket如何实现长连接
  8. java ajax搜索框提示,Javaweb-案例练习-2-给搜索框添加提示
  9. Mysql SQL查询今天、昨天、n天内、第n天(执行效率不高)
  10. 摆放家具-定义房子类
  11. oracle12c asmfd,Oracle 12C R2-新特性-自动配置ASMFD
  12. POJ 1422 Air Raid (最小路径覆盖)
  13. AI 终极问题:我们的大脑是一台超级计算机吗?
  14. php 变量存活期,php 变量生命周期:PHP源码分析-PHP的生_php
  15. Qt 递归安装父控件的所有子孙控件事件过滤器 遍历安装事件过滤器
  16. c语言单项选择题标准化考试系统,c语言课程设计(单项选择题标准化考试系统)分析报告.doc...
  17. 台式计算机最新配置,例举2019推荐组装台式电脑最新配置清单
  18. torch.max()及其参数探究/torch.max()返回的索引是什么意思
  19. 项目管理工具 | 软件开发项目管理软件
  20. LeetCode 544. 输出比赛匹配对(NBA季后赛对阵图)

热门文章

  1. 4.1 什么是脚手架(CLI)
  2. 伪元素(3)-解决IE6/IE7/IE8不支持before,after问题
  3. SpringBoot是什么,可以做什么?
  4. Silanna Semiconductor与Transphorm联合开发一流的65W USB-C PD GaN适配器参考设计
  5. “cannot simultaneously fetch multiple bags”的解决方法
  6. 2022 Jiangsu Collegiate Programming Contest I. Cutting Suffix
  7. 在ROS中实现双目相机校正(以PointGrey为例)
  8. java计算机毕业设计体育城场地预定系统前台源码+系统+数据库+lw文档+mybatis+运行部署
  9. 通信中间件DDS介绍(一)
  10. #203-[DFS]狼和羊