自己开始学习makefile是由于VScode配置工程文件,看别人的配置不是很懂,于是决定入门学习下makefile。

先来说说makefile是做什么用的:makefile可以实现工程的自动化编译,提高工作效率。对于只有一个或两三个源文件的程序,我们可以直接用g++ 命令进行编译链接。例如以下程序,func.cpp func.hpp test.cpp 均在同一目录下

编译:打开cmd 输入:g++ -c  test.cpp func.cpp

链接:在cmd中输入 :g++ -o test test.o func.o 即可

上面的程序比较简单,源文件很少,而且均在同一个文件夹中,使用g++进行编译链接还比较简单,但是当工程比较复杂,源文件很多并且放在不同的文件夹中时,再使用g++命令将变得很复杂。

以上面的程序为例,将文件 func.cpp func.hpp 放入func文件夹中,如下图所示

此时利用g++ 进行编译需要输入命令:g++ -c test.cpp ./func/func.cpp -I./func ,编译后 test.o以及func.o将出现在同一目录下。

使用以上命令对程序进行编译链接并没有问题,但是当工程源文件越来越多,目录结构越来越复杂时,每次输入g++ 命令将变得十分繁琐和复杂,影响工作效率,为此,makefile出现了,准确的说,makefile只是一个文本文件,makefile通过描述各个工程文件间的依赖关系,利用g++实现了工程的自动化编译。

对于上面的例子,使用makefile进行编译(本人使用的是mingw64),新建makefile文件,代码如下:

test:./obj/test.o ./obj/func.o
  g++ -o test ./obj/test.o ./obj/func.o
./obj/test.o:test.cpp ./func/func.hpp
  g++ -c test.cpp -o ./obj/test.o -I./func/
./obj/func.o:./func/func.cpp ./func/func.hpp
  g++ -c ./func/func.cpp -o ./obj/func.o
.PHONY:clean
clean:
  del .\obj\*.o test.exe
在当前目录下打开cmd ,键入mingw32-make 即可对工程进行编译

makefile入门-初步了解的更多相关文章

  1. vim+makefile入门编辑,编译,差错实例

    vim+makefile入门编辑,编译,差错实例 vim makefile 编译 编写代码,一般在vim中编辑完后,输入:wq,在命令行下输入g++ hello.cc -o hello ,出现问题,打 ...

  2. 菜鸟玩云计算之二十:saltstack入门初步

    菜鸟玩云计算之二十 SaltStack 入门初步 0. saltstack 是什么 参考下面的文章: http://docs.saltstack.com/en/latest/topics/tutori ...

  3. 30天自制操作系统(二)汇编语言学习与Makefile入门

    1 介绍文本编辑器 这部分可直接略过 2 继续开发 helloos.nas中核心程序之前的内容和启动区以外的内容先不讲了,因为还涉及到一些软盘方面的知识. 然后来讲的是helloos.nas这个文件 ...

  4. Makefile 入门(加减乘除实现)

    Makefile 入门(加减乘除实现) 准备 使用任意Linux发行版即可,本文使用WSL Ubuntu. 开始之前,需要安装必要的工具: sudo apt install make g++ 开始 1 ...

  5. 挑战30天写操作系统-day2-汇编语言学习与Makefile入门

    1.介绍文本编辑器 这里,我们直接采用自己windows电脑自带的文本编辑器即可以完成制作要求 2.继续开发 下面先是对昨天使用的helloos.nas文件内容进行详细解释 ; hello-os ; ...

  6. Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏

    在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...

  7. Makefile入门

    相信大家对makefile都不陌生,在Linux下编写程序基本都离不开makefile的编写,我们都知道多个.c文件经过编译器编译后得到多个.o文件,这些文件是互相独立的,但最终我们要得到一个可正常运 ...

  8. LinQ实战学习笔记(一) LINQ to (Objects, XML, SQL) 入门初步

    LINQ对于笔者来说, 优美而浓缩的代码让人震惊. 研究LINQ就是在艺术化自己的代码. 之前只是走马观花学会了基本的语法, 但是经常在CSDN看到令人惊讶自叹不如的LINQ代码, 还是让人羡慕嫉妒恨 ...

  9. Makefile入门教程

    Makefile介绍 make是一个命令工具,它解释Makefile 中的指令(应该说是规则).在Makefile文件中描述了整个工程所有文件的编译顺序.编译规则.Makefile 有自己的书写格式. ...

随机推荐

  1. Web漏洞扫描工具(批量脱壳、反序列化、CMS)

    一.什么是Web漏洞扫描工具 即是指“扫描Web应用以查找安全漏洞(如跨站脚本,SQL注入,命令执行,目录遍历和不安全服务器配置)的自动化工具”,其中许多可能是由不安全或不正确的编码和设计.另一方面, ...

  2. Maven 下载、安装、配置学习

    一.Maven 下载与安装 电脑已安装:JDK.Eclipse 1.下载Maven:http://maven.apache.org/download.cgi 2.解压并安装:解压路径名不能有中文! 3 ...

  3. 渐进反馈式搜索技术助力运维工程师——Linux命令高效检索

    日常生活工作中,我们通过搜索引擎查询相关资料时,经常遇到不知如何指定准确关键词的情况,仅仅根据指定大概范围的关键词时,搜索结果往往不能尽如人意. <信息导航>APP最新版本(Ver 1.1 ...

  4. 分组ntile

    select order,ntile(3) over (order by order) from ss

  5. 吴恩达Machine Learning 第一周课堂笔记

    1.Introduction 1.1 Example        - Database mining        Large datasets from growth of automation/ ...

  6. python大法好——飞机大战完整吧

    # -*- coding:utf-8 -*-import pygamefrom pygame.locals import *import time '''说明1.按下b键,让玩家飞机爆炸 2.爆炸效果 ...

  7. python目录结构

    import sys,os #__file__取得当前文件名,pycharm会自动加上完整路径 #os.path.dirname取得上一级目录 #os.path.abspath取得绝对路径 BASE_ ...

  8. OO第十五次作业

    一.测试与正确性论证的效果差异 测试和正确性论证分别是从理论和实践两个角度去规范程序的正确性的,我认为其主要的区别在于对于程序透明度的需求上, 测试作为一种实践手段,他的实施的要求是比较低的:在完全了 ...

  9. mac电脑复制键失灵

    mac键按command+c偶尔失灵打电话给客服. 客服的解决方案: 1.关机状态同时按: shiflt+option+control+关机键  (重置键盘快捷键不会丢失数据)  20秒 2.松开后重 ...

  10. 16Linxu_Squid_iSCSI

    使用Squid部署代理缓存服务 yum install squid 标准正向代理: 透明正向代理 反向代理 ACL访问控制 使用iSCSI服务部署网络存储 yum install targetd ta ...