前言

1.在Linux开发环境中,编写Makefile文件是一个必须的技能,虽然现在有好多IDE可以自动生成所需要的Makefile文件,但有时能看懂Makefile文件也是更好的了解项目的编译过程。
2.我在这里只演示入门级Makefile文件的编写,我使用的系统是Ubuntu16.04这个版本,使用的演示源码语言是C++。

源文件准备

1.假设我们现在有main.cpp,other.cpp,other.h这三个源文件,其中main.cpp是主函数,它调用了other.h里面的函数。
main.cpp代码如下:

#include "other.h"int main(void)
{ int i = add(45,50);cout << "i = " << i << endl;return 0;
}

other.cpp

#include "other.h"int add(int i, int j)
{return i+j;
}

other.h

#ifndef OTHER_H
#define OTHER_H
#include <iostream>using namespace std;int add(int, int);#endif // OTHER_H

2.如果现在我们使用g++进行编译,则是直接生成用-o编译,生成可执行文件.

g++ main.cpp other.cpp -o add

然后运行可执行文件:

./add


3.如是只有一两个源文件,这样编译是没有问题的,但有几十个或者上百个时,这样编译是不现实的,那就要Makefile文件做这一步。
(1)Makefile文件的编写规则是:

规则:依赖命令
规则:依赖命令

(2)那用Makefile编译上面的源码的步骤是:
A、在存放源码的路径下新建一个Makefile文件,不要任何后缀,用vim打开。
B、按上面给的规则写好Makefile文件:

add:main.cpp other.cppg++ main.cpp other.cpp -o addtest:./add
clean:rm add

C、保存,退出,在当前目录下执行make这个命令:

可以看到,在当前目录下多了一个add的可执行文件,返回看上面的makefile的代码,我写了三个规则,但Make是默认只执行第一个规则而已。
接下我执行:

make  test

执行了第二条规则,以此类推,要执行第三条规则,则在make后面加上规则名。

D.依赖项的意思是,如果依赖的其中的文件有更新则重新编译,但只编译有变化的文件。

4.这只是简单的介绍了Makefile文件的编写方式,那真正项目中的Makefile文件是这样子的,会使用一些通配符,Makefile文件能调用的库函数等,但原理不变。

EXE = subject  #给变量赋值#src放源代码文件,object是放项目的路径
SUBDIR = src object#用迭代器把所有的子目录下的cpp找到
CXX_SURCES = $(foreach dir,$(SUBDIR),$(wildcard $(dir))/*.cpp)#patsubst函数把列表的文件替换
CXX_OBJECTS=$(patsubst %.cpp,%.o,$(CXX_SURCES))#得到.d文件
DEP_FILES=$(patsubst %.cpp,%.d,$(CXX_SURCES))$(EXE):$(CXX_OBJECTS) #编译命令g++ $(CXX_OBJECTS) -o $(EXE)%.o:%.cpp #链接命令g++ -c -MMD $< -o $@  #$<(依赖项列表) $@(当前规则) -MMD(生成.d文件为生.h的依赖)-include $(DEP_FILES)  #简化头文件依赖cleran:rm -rf $(EXE) $(DEP_FILES) $(CXX_OBJECTS)

Linux编程——入门级Makefile文件编写相关推荐

  1. C和C++混合编程的Makefile的编写!

    在项目实践中,经常遇到C和C++混合编程的情况. 目前的业务需求是: c写的几个文件,和一个C++文件要整合为一个动态库,被C++调用.而这个动态库的生成过程中,会链接几个基础的开发库,比如libz, ...

  2. 基础知识(三)makefile文件编写初级篇

    linux下进行c++开发,需要熟悉相关编译器的编译.链接命令.这边主要以实例讲解,如何在linux中,进行c++程序简单的编译链接运行. 一.单文件编译链接 这里先从最简单的单个文件编译链接为例.在 ...

  3. SYNOPSYS VCS Makefile文件编写与研究

    SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明: ma ...

  4. 从简入难makefile文件编写,Linux C++编程,简单vi命令

     1.一个最基本的C++程序 2.第二个c++程序 3.第一个入门级别的简单的makefile 4.在makefile中定义变量. 5.编写makefile的依赖 如果start:标识后面的某个. ...

  5. makefile文件编写教程

    技术交流QQ群:1027579432,欢迎你的加入! 1.make介绍 gcc:编译器(gcc根据菜谱进行编译) make: linux自带的构建器(相当于一个菜谱) 构建的规则(菜谱)在makefi ...

  6. makefile文件编写_九图记住Makefile

    本文首次编辑时间2020.07.20 最后编辑时间2020.08.03 欢迎转载,转载请附上原文链接 参考: GNU make说明文档:https://www.gnu.org/software/mak ...

  7. makefile文件编写

    makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明: 1.文件包含: 语法:include ...

  8. 简单的makefile文件编写

    习惯了windows下ide创建工程已经代码的编写,然后一键运行,很简单,因为很多事ide都帮我们做了,但是linux下不一样,需要手动编译,执行一条条的命令,一般工程都是由于很多文件组成的,比如c+ ...

  9. Makefile文件编写规则

    From: http://aviva.iteye.com/blog/807494 Makefile中包含五种内容:显式规则,隐式规则,变量定义,指令(directive)和注释. 1.显式规则――描述 ...

最新文章

  1. GridView绑定数据源 绑定DataReader /DataSet /DataTable
  2. Scala Collection体系介绍
  3. JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
  4. stats | 数据降维之主成分分析(PCA)
  5. 添加类库引用后,命名空间出错的解决方案
  6. (绿色)修正版gooflow流程解决方案(源码分享+在线演示+UI地址下载)
  7. 7-zip压缩解压软件.html,7-Zip 压缩率比较高的压缩软件 17.01 美化优化版
  8. mui ios ajax请求,MUi框架ajax请求WebService接口实例
  9. 知识蒸馏论文翻译(9)—— Multi-level Knowledge Distillation via Knowledge Alignment and Correlation
  10. Pycharm 去掉拼音检查,大小写检查,自动补全不区分大小写
  11. ActiveMq简单使用
  12. 视觉技术的圣杯:光线追踪如何再现真实世界?
  13. Kotlin细节十五:作用域函数与 this it 关键字
  14. 一个农村博士的独白:全家为什么只有我读到了博士?
  15. python实现局域网攻击_mac泛洪攻击arp欺骗(python脚本)
  16. CAN201 网络编程 笔记
  17. Sql2012的下载与安装
  18. Rust学习记录 -> 线程之间的通道通信
  19. JQ(一)--JQ简介
  20. python ppt转pdf macos_如何在 macOS 上一键批量把 PPT 和 Word 文件转成 PDF

热门文章

  1. linux 文件大小_linux系统中查看目录大小的du命令常
  2. 【opencv】7. cv::VideoWriter的使用,把图片写进video
  3. 代理模式及Java实现动态代理
  4. Spring MVC 入门示例讲解
  5. matlab连接字符串
  6. 从“架构师书单”讲开去
  7. 卷积神经网络Convolution Neural Network (CNN) 原理与实现
  8. 如何设计一门语言(四)——什么是坑(操作模板)
  9. Day 21:Docker 入门教程
  10. C/C++求职宝典21个重点笔记(常考笔试面试点)