Linux编程——入门级Makefile文件编写
前言
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文件编写相关推荐
- C和C++混合编程的Makefile的编写!
在项目实践中,经常遇到C和C++混合编程的情况. 目前的业务需求是: c写的几个文件,和一个C++文件要整合为一个动态库,被C++调用.而这个动态库的生成过程中,会链接几个基础的开发库,比如libz, ...
- 基础知识(三)makefile文件编写初级篇
linux下进行c++开发,需要熟悉相关编译器的编译.链接命令.这边主要以实例讲解,如何在linux中,进行c++程序简单的编译链接运行. 一.单文件编译链接 这里先从最简单的单个文件编译链接为例.在 ...
- SYNOPSYS VCS Makefile文件编写与研究
SYNOPSYS VCS Makefile文件编写与研究 这个Makefile是synopsys提供的模板,看上去非常好用,你只要按部就班提供实际项目的参数就可以了.我们来看这个文件的头部说明: ma ...
- 从简入难makefile文件编写,Linux C++编程,简单vi命令
1.一个最基本的C++程序 2.第二个c++程序 3.第一个入门级别的简单的makefile 4.在makefile中定义变量. 5.编写makefile的依赖 如果start:标识后面的某个. ...
- makefile文件编写教程
技术交流QQ群:1027579432,欢迎你的加入! 1.make介绍 gcc:编译器(gcc根据菜谱进行编译) make: linux自带的构建器(相当于一个菜谱) 构建的规则(菜谱)在makefi ...
- makefile文件编写_九图记住Makefile
本文首次编辑时间2020.07.20 最后编辑时间2020.08.03 欢迎转载,转载请附上原文链接 参考: GNU make说明文档:https://www.gnu.org/software/mak ...
- makefile文件编写
makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明: 1.文件包含: 语法:include ...
- 简单的makefile文件编写
习惯了windows下ide创建工程已经代码的编写,然后一键运行,很简单,因为很多事ide都帮我们做了,但是linux下不一样,需要手动编译,执行一条条的命令,一般工程都是由于很多文件组成的,比如c+ ...
- Makefile文件编写规则
From: http://aviva.iteye.com/blog/807494 Makefile中包含五种内容:显式规则,隐式规则,变量定义,指令(directive)和注释. 1.显式规则――描述 ...
最新文章
- GridView绑定数据源 绑定DataReader /DataSet /DataTable
- Scala Collection体系介绍
- JAVA移慎_java里面给对象赋值,慎用赋值符号(=) (转)
- stats | 数据降维之主成分分析(PCA)
- 添加类库引用后,命名空间出错的解决方案
- (绿色)修正版gooflow流程解决方案(源码分享+在线演示+UI地址下载)
- 7-zip压缩解压软件.html,7-Zip 压缩率比较高的压缩软件 17.01 美化优化版
- mui ios ajax请求,MUi框架ajax请求WebService接口实例
- 知识蒸馏论文翻译(9)—— Multi-level Knowledge Distillation via Knowledge Alignment and Correlation
- Pycharm 去掉拼音检查,大小写检查,自动补全不区分大小写
- ActiveMq简单使用
- 视觉技术的圣杯:光线追踪如何再现真实世界?
- Kotlin细节十五:作用域函数与 this it 关键字
- 一个农村博士的独白:全家为什么只有我读到了博士?
- python实现局域网攻击_mac泛洪攻击arp欺骗(python脚本)
- CAN201 网络编程 笔记
- Sql2012的下载与安装
- Rust学习记录 -> 线程之间的通道通信
- JQ(一)--JQ简介
- python ppt转pdf macos_如何在 macOS 上一键批量把 PPT 和 Word 文件转成 PDF
热门文章
- linux 文件大小_linux系统中查看目录大小的du命令常
- 【opencv】7. cv::VideoWriter的使用,把图片写进video
- 代理模式及Java实现动态代理
- Spring MVC 入门示例讲解
- matlab连接字符串
- 从“架构师书单”讲开去
- 卷积神经网络Convolution Neural Network (CNN) 原理与实现
- 如何设计一门语言(四)——什么是坑(操作模板)
- Day 21:Docker 入门教程
- C/C++求职宝典21个重点笔记(常考笔试面试点)