关于Linux下对于makefile的理解

什么是makefile呢?在Linux下makefile我们可以把理解为工程的编译规则。一个工程中源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,那些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可执行操作系统的命令。

makefile带来的好处就是---“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。

make命令在执行时,需要一个makefile文件,以告诉make命令要怎样去编译链接程序。只要我们makefile写的足够好,make命令会自动智能的根据当前文件自己编译所需要的文件和链接目标文件。

makefile的规则:

target:prerequisites

  command

.......................

target是目标文件,prerequisites就是要生成target所需要的文件或是目标。command就是make需要执行的命令。这是一个文件依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。如果prerequisites中如果有一个以上的文件比target文件内容要新的话,command所定义的文件就会被执行。这就是makefile最核心的内容。

举个栗子:

先准备三个文件:file1.c,file2.c,file2.h

file1.c:

#include<iostream>

int main()

{

file2printf();

return 0;

}

file2.h:

#ifndef FILE2_H_

#define FILE2_H_

void file2printf();

#endif

file2.c

#include"file2.h"

void file2printf()

{

printf("hello world!\n");

}

那么它的makefile怎么写呢?(makefile文件和文件在同一目录下)

test:file1.o file2.o          //test依赖file1.o和file2.o两个目标文件

  gcc -c file1.o file2.o -o test    //编译出test可执行文件,-o 表示指定的目标文件名

file1.o:file1.c file2.h          //编译出file1.o文件,file1.o依赖于file1.c和file2.h,-c表示GCC只把给他的文件编译成目标文件  

  gcc -c file1.c -o file1.o

file2.o:file2.c file2.h                       //这两句与上两句相同

  gcc -c file2.c -o file2.o

.PHONY:clean

clean:

rm -rf* .o test      //当输入make clean命令时,就会删除所有的.o文件和test文件了

注意:每个命令行之前都必须有tab符号。

这是简单的makefile的写法,其实makefile还有很多的功能注意点值得学习。大家可以下去自行学习

以上这篇关于Linux下对于makefile的理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • linux shell进度条实现方法

    直接看代码吧,很简单 复制代码 代码如下: #!/bin/bash b=''i=0while [ $i -le  100 ]do    printf "progress:[%-50s]%d%%\r" $b $i    sleep 0.1    i=`expr 2 + $i`            b=#$bdoneecho

  • 实例详解Linux下的Make命令

    前言 无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难.而make工具则可自动完成编译

  • Linux下简易进度条的实现代码

    在生活中,进度条是很常见的,那么,进度条是如何实现的呢? 首先,进度条的动态是利用人眼视觉暂留效果的.实际上是如下过程: 先输出:[=     ]表示进度是1%,刷新之后 再输出:[==    ]......由于刷新的很快,所以看起来像是等号不断向后增加,直到进度完成. 在写这个程序之前我们需要了解一下的知识: 1.缓冲区 缓冲区分为无缓冲.行缓冲.全缓冲. 无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr. 行缓冲:表示的是输入输出遇到换行才执行真正的I/O操

  • 详解linux下make命令的使用方法

    本文我们将用一些实例来讨论 make 命令背后的工作机制. Make 如何工作的 对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标.这些目标通常存放在以 "Makefile" 来命名的特殊文件中,同时文件也包含与目标相对应的操作.更多信息,阅读关于 Makefiles 如何工作的系列文章. 当 make 命令第一次执行时,它扫描 Makefile 找到目标以及其依赖.如果这些依赖自身也是目标,继续为这些依赖扫描 Makefile 建立其依赖关系,然后编译它们.一旦主依

  • Linux/Unix环境下的make命令详解

    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难.而make工具则可自动完成编译工作,并且可以

  • linux corosync+pacemaker+drbd+mysql配置安装详解

    一, 基本环境介绍及基本环境配置 节点1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬盘 节点2: node1.hulala.com      192.168.1.36     centos6.5_64    添加8G新硬盘 vip   192.168.1.39 节点1与节点2均需配置 修改主机名: vim /etc/sysconfig/network HOSTNAME=node1.hulala.com 配置host

  • Linux Makefile与Shell的问题

    大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本.但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂.你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的结果,然后在计算机上运行这些例子,对照看一下.   示例一: 复制代码 代码如下: if [ "$(BUILD)" = "debug" ]; then  echo "build debug"; else echo "b

  • Linux用make指令编译进度条程序

    本文实例为大家分享了Linux下写一个简单进度条的具体代码,供大家参考,具体内容如下 首先建立一个新的文件,touch progress_bar.c 执行该vim progress_bar.c命令,写进度条的程序.写进一个进度条程序: #include<stdio.h> #include<unistd.h> #include<string.h> void progress() { int i = 0; char bar[102]; memset(bar,0,102*si

  • Linux下Makefile的automake生成全攻略

    文/余涛 作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了. 在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的GNU程序一样,只要使用"./configure","make","ma

  • Linux/Unix环境下的Make和Makefile详解

    Linux/Unix环境下的Make和Makefile详解 无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简

随机推荐