一.我对makefile的理解:

经过一段时间对makefile的学习,我理解的makefile就是将程序员手动编译源文件的过程用一个脚本执行,这对于小型项目来说,程序员手动执行和用makefile来执行感官上可能没有大的差异,但是对于中大型项目来说,makefile的存在大大提供了程序员编译代码效率,一个好的makefile文件是一个项目健康存在的基础。

二.初涉makefile:

用个简单的例子初步认识下makefile:

源文件:test.cpp:

#include<iostream>

using namespace std;

class A

{

private:

int a;

public:

A(int i)

{

a=i;

}

void disp()

{

cout<<a<<",";

}

};

class B

{

private:

int b;

public:

B(int j)

{

b=j;

}

void disp()

{

cout<<b<<",";

}

};

class C:public B,public A

{

private:

int c;

public:

C(int k):

A(k-2),B(k+2)

{

c=k;

}

void disp()

{

A::disp();

B::disp();

cout<<c<<endl;

}

};

int main()

{

C obj(10);

obj.disp();

return 0;

}

Makefile文件Makefile:

test:test.o

g++  test.o  -o  test

test.o:test.cpp

g++  -c  test.cpp  -o  test.o

clean:

rm  -fr  test  test.o

****************************************************************************

test:test.o                         ---- test是目标文件,也就是最后要生成的可执行文件;

test.o编译源文件产生的中间代码文件;

这行命令的意思是:目标文件test的产生依赖于中间代码文件test.o;

g++  test.o  -o  test           ---- 这行是编译器通过中间代码文件产生目标文件的命令,命令必须以tab键打头,否则执行的时候会报错;这边使用的是g++编

译器,所以你的环境必须安装g++编译器;

test.o:test.cpp                    ----这行的目标文件是test.o,依赖文件是test.cpp;和第一行的格式相同;

g++ -c test.cpp –o test.o     ----这行是通过源文件test.cpp如何生成中间代码文件test.o,是编译命令;

clean:

rm  -fr  test  test.o

clean是清除想要删除的文件,执行的时候需要使用命令make clean,一般是删除中间代码文件和最后生成的目标文件,即可执行文件;

在环境中执行make命令,系统就会在目录下自动寻找Makefile、makefile文件,然后执行makefile文件中的内容;同样,你可以指定你自己的makefile文件名,比如:makefile_201020831,执行的时候必须用make –f makefile_201020831;

Makefile的执行过程是一个递归的过程,目标文件:依赖文件,是使用命令通过依赖文件生成目标文件的过程;

验证生成的目标文件,即可执行文件,直接./test即可。

Makefile学习(一)----初步理解的更多相关文章

  1. C#学习之初步理解委托、事件、匿名方法和Lambda

    最经在学习LinqtoSql,然后扯到Lambda表达式,然后扯到匿名方法,然后扯到委托,最后扯到事件处理...后来发现对委托这个概念和事件处理这个过程理解得不是很清晰,遂得一下学习笔记.那里说得不对 ...

  2. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  3. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  4. makefile学习(1)

    GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法. 最后用 ...

  5. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  6. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  7. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  8. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  9. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

随机推荐

  1. VMWare版本兼容问题处理

    其他电脑拷贝过来的VMWare虚拟机启动时报错: 在虚拟机根目录中找到"vmx"后缀文件,发现原来的VM版本为14,而本地的VMWare版本为11. virtualHW.versi ...

  2. html 手机端click 事件去掉黑色阴影效果

    添加css样式 html{-webkit-text-size-adjust: 100%;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);} 1.  -web ...

  3. I/O————字节流

    InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 下面是使用 字节输入流读取文件字节输出流写入文件 文件可能不存在,所以使用try catch pu ...

  4. MongoDB自动递增序列

    MongoDB没有像SQL数据库外开箱即用自动递增功能.默认情况下,它采用了12字节的ObjectId为_id字段作为主键来唯一地标识文档.然而,可能存在的情况,我们可能希望_id字段有一些其它的自动 ...

  5. python第一模块数据类型

    一·进制之间的转换 十进制转换为二进制:逆序取余法. 二进制转换为十进制:如1101  1*2^0 + 0*2^1 + 1*2^2 +1 十六进制转换为二进制:231     0010  0011   ...

  6. Vue.js - Day5 - Webpack

    在网页中会引用哪些常见的静态资源? JS .js .jsx .coffee .ts(TypeScript 类 C# 语言) CSS .css .less .sass .scss Images .jpg ...

  7. 浅谈C++ 内存泄漏及其检测工具

    浅谈C++ 内存泄漏及其检测工具 http://wenku.baidu.com/link?url=1DGkOOvd_ITZyB8IHAwfhCOx2tfO6id8UfuyQkAMHZU6sasaAXz ...

  8. 简洁js日历控件的使用

    往Web工程添加纯js日历控件 在网上找到了DatePicker.js(http://www.cnblogs.com/shenyixin/archive/2013/03/11/2954156.html ...

  9. iOS Category实现原理 (补充)

    iOS Category实现原理 (补充) load 和 initialize load load方法会在程序启动就会调用,当装载类信息的时候就会调用. 调用顺序看一下源代码.在 objc-loadm ...

  10. @AutoWired注解使用时可能会发生的错误

    @Autowired注解:用于对Bean的属性变量.属性的set方法及构造函数进行标注,配合对应的注解处理器完成Bean的自动配置工作.@Autowired注解默认按照Bean类型进行装配.  1.在 ...