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 ├─ ...
随机推荐
- UIView的frame和bounds区别
UIView的frame和bounds区别 iOS中,大家肯定对view和frame都不陌生,我们设置view在父view中的位置和大小时,只需要设置frame就可以了. 可能大家也有查过网上的一些资 ...
- webapi之jsonp调用
定义跨域handle public class CorsHandler : DelegatingHandler { const string Origin = "Origin"; ...
- 对REST的一些理解
昨天学习REST,发现有篇文章写的真心不错,看了一遍,并没有完全理解,将一些感觉比较重要的做个记录. 文章链接:REST简介 定义 Representational State Transfer ( ...
- JS数值输入控制
在html文本框录入数值时,可用如下方法进行控制判断. 整数:<input type="text" name="aaa" onkeypress=" ...
- 第3章 Struts2框架--1、Struts2环境搭建
第3章 Struts2框架--1.Struts2环境搭建 搭建步骤: 1.从下载http://struts.apache.org 没找到Struts2.3.16版,就下载了2.3.29 2.拷贝后解压 ...
- Licode Install CentOS 7.0
mysqldump --add-drop-table -uroot -p123456 jit >/extra_disk/jit.sql sudo npm install -g node-gyp ...
- PHP类中的__get()和__set函数到底有什么用?
当试图获取一个不可达变量时,类会自动调用__get. 同样的,当试图设置一个不可达变量时,类会自动调用__set. 在网站中,这两个并不是什么非用不可的函数. 例如: Class Test { ...
- PL/SQL学习(三)游标
原文参考:http://plsql-tutorial.com/ 两种类型: 隐式: 执行INSERT.UPDATE.DELETE 或者只返回一条结果的SELECT语句时默认创建 ...
- php怎么保留相除后几位小数:sprintf
$n=0.1265489; echo sprintf("%.2f", $n); // 0.13
- php实现手机拍照上传头像功能
现在手机拍照很火,那么如何使用手机拍照并上传头像呢?原因很简单,就是数据传递,首先手机传递照片信息,这个就不是post传递 也不是get函数传递, 这个另外一种数据格式传递,使用的是$GLOBALS ...