摘要 假定你对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++ --help
  • main.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.omake test命令呢?没有?这学习态度不太好哟,当你执行了这两个命令,脑子里应该立刻出现一个疑问:为毛我执行make clean命令就执行clean编译块,而我执行make命令却执行test编译块,我并没有告诉make我要执行test语句块啊?make是有约定的,如果你不指定让它执行哪个编译块,他就默认执行第一个编译块,不妨把clean编译块和第一个互换试试!

Makefile第一讲:一个简单的Makefile的更多相关文章

  1. 第一讲 一个简单的Qt程序分析

    本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton&g ...

  2. 一个简单的Makefile的编写【用自己的话,解释清楚这些】

    用自己的话,解释清楚这些~ Makefile是程序员编写出来指导编译器编译程序源码为目标文件(可执行文件,或链接库) 这里只写一个简单的Makefile 作为例子 其需求如下: frank@ubunt ...

  3. 一个简单的makefile文件

    一个简单的makefile文件:可以编译指定目录下的所有c和cpp文件,暂未加入自动头文件的依赖. #!/bin/bash #编译器 CROSS_COMPILING_PATH = #源文件路径 VPA ...

  4. GNU Make 学习系列一:怎样写一个简单的Makefile

    编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...

  5. struts2入门第一天----------一个简单例

    搭建完环境后就可以动手去打代码了.首先创建一个简单的提交表单的jsp页面(html页面也可以), <%@ page language="java" import=" ...

  6. 《深度解析Tomcat》 第一章 一个简单的Web服务器

    本章介绍Java Web服务器是如何运行的.从中可以知道Tomcat是如何工作的. 基于Java的Web服务器会使用java.net.Socket类和java.net.ServerSocket类这两个 ...

  7. 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间

    打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...

  8. 一个简单的makefile文件编写

    下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...

  9. 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件

    通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...

随机推荐

  1. ios8地图开发的报错

    报错如下:Trying to start MapKit location updates without prompting for location authorization. Must call ...

  2. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  3. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

  4. (hdu)5234 Happy birthday 二维dp+01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5234 Problem Description Today is Gorwin’s birt ...

  5. (转)UIColor,CGColor,CIColor三者的区别和联系

    最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清楚它们之间的区别和联系.下面我们分别看看它们三个的概念: 一.UIColo ...

  6. x264_param_t结构

    typedef struct x264_param_t { unsigned int cpu; // CPU 标志位 int i_threads; // 并行编码多帧; 线程数,为0则自动多线程编码 ...

  7. CSS伪类对象before和after的用法

    一直感觉这两个伪类对象不是很重要,并且IE对它两兄弟并不支持,所以也没有怎么静下心来研究,只有在清楚浮动clearfix的时候会用到哈,其他都很 少用!不过最近在研究css3的时候觉得它两个的搭配不仅 ...

  8. mysqli和mysql和pdo查询

      mysql mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_ ...

  9. linux正确重启MySQL的方法

    修改了my.cnf,需要重启MySQL服务,正确重启MYSQL方法请看下面的文章 由于是从源码包安装的Mysql,所以系统中是没有红帽常用的servcie mysqld restart这个脚本 只好手 ...

  10. centos nginx

    1.关闭SELinux 查看SELinux状态: (1)/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...