Makefile第一讲:一个简单的Makefile
摘要 假定你对linux已经比较的熟悉,假定你编程已经稍有经验,本文不会对文章作出太多基础性解释,看不懂莫怪,只当作给学习的朋友一个引导思路,我也是一个初学者,边学边写,将学会的教给大家,文章有错误之处误导了朋友,请轻喷
假定你对linux已经比较的熟悉,假定你编程已经稍有经验,本文不会对文章作出太多基础性解释,看不懂莫怪,只当作给学习的朋友一个引导思路,我也是一个初学者,边学边写,将学会的教给大家,文章有错误之处误导了朋友,请轻喷
main.cpp
#include <iostream>
using namespace std;
int main() {
cout <<"Hello makefile";
return 0;
}
makefile
test:main.o
# 复制代码请注意,开头必须是一个tab,而不能是四个空格, 否则make会报错,这是必须的
g++ main.o -o test
main.o:main.cpp
g++ -c main.cpp -o main.o
clean:
rm main.o test
在此,我会一行一行的解释给大家,暂且把形如这样的一个代码块命名为编译块吧,它俩是密不可分的一个整体:
test:main.o
g++ main.o -o test
- 要特别注意的是复制代码后,一定要把每行前边的空格换成tab,在makefile中tab是命令的开始标志,tab后面的被当作命令执行 ,如果是空格在make时肯定会报错
test:main.o告诉make命令,执行一个叫test的编译块,这个编译块依赖main.o文件(这句啥意思?请继续看),test编译块会执行命令g++ main.o -o test。g++表明这是编译c++程序,如果是c程序,请用gcc。这就是题外话了,与makefile无关,如果想了解gcc和g++命令,请在终端输入:g++ --helpmain.o:main.cpp与上例类似,就不说了,上边提到test编译块依赖main.o文件,依赖的正是它,也就是说当执行test编译块时,test编译块需要main.o这个文件,于是它就到目录里去找main.o,但是它在目录里找不到main.o,这时他就在makefile文件里找main.o这样一个编译块,于是它就找到了main.o:main.cpp,接着它执行这个编译块下边的命令,然后生成了main.o这个文件,然后再执行test编译块中的命令g++ main.o -o test,最终生成可执行文件./test,由于这是一个最简单的,没任何依赖的C++程序,因此:其实main.o这个文件就是一个可执行文件,不信你在命令行试试:./main.o(可能需要改为可执行权限chmod u+x main.o)clean:编译块告诉make 当在终端执行make clean时执行rm main.o test命令,看到make clean你是否想到了在终端执行:make main.o和make test命令呢?没有?这学习态度不太好哟,当你执行了这两个命令,脑子里应该立刻出现一个疑问:为毛我执行make clean命令就执行clean编译块,而我执行make命令却执行test编译块,我并没有告诉make我要执行test语句块啊?make是有约定的,如果你不指定让它执行哪个编译块,他就默认执行第一个编译块,不妨把clean编译块和第一个互换试试!
Makefile第一讲:一个简单的Makefile的更多相关文章
- 第一讲 一个简单的Qt程序分析
本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton&g ...
- 一个简单的Makefile的编写【用自己的话,解释清楚这些】
用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...
- 一个简单的makefile文件
一个简单的makefile文件:可以编译指定目录下的所有c和cpp文件,暂未加入自动头文件的依赖. #!/bin/bash #编译器 CROSS_COMPILING_PATH = #源文件路径 VPA ...
- GNU Make 学习系列一:怎样写一个简单的Makefile
编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...
- struts2入门第一天----------一个简单例
搭建完环境后就可以动手去打代码了.首先创建一个简单的提交表单的jsp页面(html页面也可以), <%@ page language="java" import=" ...
- 《深度解析Tomcat》 第一章 一个简单的Web服务器
本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...
- 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间
打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...
- 一个简单的makefile文件编写
下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
随机推荐
- C++文件逐字节对比
作为一个OIer,装逼的本事是必不可少的.最近,为了展示自己CPP水平,为同学们做了一个Cena(当然,命令行界面,很迷你).但是,却在文件对比这个最重要的环节卡住了. 我想了很多办法,首先想到的就是 ...
- ubuntu14.04+opencv 3.0+python2.7安装及测试
本文记录了ubuntu下使用源码手动安装opencv的过程.步骤来自opencv官网 此外记录了在python中安装及载入opencv的方法. 1.安装opencv所需的库(编译器.必须库.可选库) ...
- 使用原生js与jQuery分别实现一个简单的tab页签
tab页签通常适用于空间有限而内容较多同时兼顾页面美观度不给用户一种信息过量视觉疲劳的情形.使用面非常广,下面我们用两种方法简单实现之. 首先,构建页面元素.页签的可点击部分我们通常用列表来承载,包括 ...
- yii2源码学习笔记(十四)
Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...
- WordPress D8 主题当中截取文章首图并显示的函数
取自 WordPress D8 主题; 路径 theme\d8\modules ; if ( ! function_exists( 'deel_thumbnail' ) ) : function de ...
- js 数组 var arr=[] 的用法总结
刚接触了一个js数组,用起来很头疼,总结一下 基本格式: var arr = [[name,value],[name2,value2],[name3,value3]]; 如何给 arr 动态添加元素 ...
- Python使用re实现计算器
re 正则表达式 计算器 海瑞博客-学习python之路•2016-12-01•Python• 59•0•A+ A- re是一门小型语言 元字符 . 通配符除了\n ^ 以什么开始的 ...
- whoosh使用笔记
1. whoosh安装 pip install Whoosh 2. 添加索引 第一步:生成schema 第二步:根据schema生成index.index就是一个目录中的一堆文件 (针对某个目录,调 ...
- Python的面向对象4
今天我们接着来聊聊继承! 那什么是继承呢? 新写的类是不必重新编写,只要从现有的类继承,就自动拥有了该类的所有功能,新类只需要编写现有类缺少的功能,可以复用已有的代码! python的继承的特点: 继 ...
- ios解决输入框弹出后position:fixed失效问题
最近在使用AmazeUI进行仿App Mobile Web开发时遇到了讨论众多的position:fixed问题.position:fixed在安卓2.2以上已经实现,但是在ios8以下系统当小键盘激 ...